尝试从 swift 2 中的 JSON 文件中读取重载错误出现
Posted
技术标签:
【中文标题】尝试从 swift 2 中的 JSON 文件中读取重载错误出现【英文标题】:Trying to read from a JSON file in swift 2 overload error showing up 【发布时间】:2015-10-29 11:17:49 【问题描述】:嗨,这里是在 Swift 2 中解析 JSON 文件的样板代码。我以前用过它,它可以工作,但由于某种原因,它在最新版本的 Xcode 7.1 和 Swift 2 中被破坏了。对这些人有什么想法吗?错误是“参数标签 '(contentsOfFile:, options:, error:)' 不匹配任何可用的重载”
import Foundation
extension Dictionary
static func loadJSONFromBundle(filename: String) -> Dictionary<String, AnyObject>?
if let path = NSBundle.mainBundle().pathForResource(filename, ofType: "json")
var error: NSError?
let data = NSData(contentsOfFile: path, options: NSDataReadingOptions, error: &error)
if let data = data
let dictionary: AnyObject? = NSJSONSerialization.JSONObjectWithData(data,
options: NSJSONReadingOptions(), error: &error)
if let dictionary = dictionary as? Dictionary<String, AnyObject>
return dictionary
else
print("Level file '\(filename)' is not valid JSON: \(error!)")
return nil
else
print("Could not load level file: \(filename), error: \(error!)")
return nil
else
print("Could not find level file: \(filename)")
return nil
【问题讨论】:
我们使用 NSJSONSerialization 的方式在 Swift 2 中发生了变化。Example here. SO 上有很多其他示例。 【参考方案1】:您使用的不是最新的 swift 代码,
我更正了你的代码,注意你应该选择最适合你的NSDataReadingOption
,我选择NSDataReadingOptions.DataReadingMapped
加上一些 api 不将错误作为输入,所以我删除了它。
请注意,当您捕获错误时,您可以使用明确声明的对象error
,这就是我删除错误变量的原因
最后,解析json的新api应该在try catch中,这就是我添加try catch的原因
import Foundation
extension Dictionary
static func loadJSONFromBundle(filename: String) -> Dictionary<String, AnyObject>?
if let path = NSBundle.mainBundle().pathForResource(filename, ofType: "json")
do
let data = try NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMapped)
do
let dictionary: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data,
options: NSJSONReadingOptions())
if let dictionary = dictionary as? Dictionary<String, AnyObject>
return dictionary
else
print("Level file '\(filename)' is not valid JSON")
return nil
catch
print("Level file '\(filename)' is not valid JSON: \(error)")
return nil
catch
print("Could not load level file: \(filename), error: \(error)")
return nil
else
print("Could not find level file: \(filename)")
return nil
所以基本上:
NSData(contentsOfFile: path, options:
不再出错。
dictionary: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data,
options
不再出错。
从文件中获取 NSData 需要尝试捕获
从 NSData 获取 json 对象需要 try catch
【讨论】:
在哪里可以找到有关 Swift 2 中所有更改的更新指南。这是我遇到的另一件事错误。 'enumerate' 不可用:调用序列上的 'enumerate()' 方法 if let dictionary = Dictionary以上是关于尝试从 swift 2 中的 JSON 文件中读取重载错误出现的主要内容,如果未能解决你的问题,请参考以下文章
尝试从 create-react-app 中的 .json 文件中读取图像
尝试从 Swift 2.0 中的 json 解析数据时出错?
Swift 中的 Array 扩展以使用 NSPropertyListReadOptions 从 plist 中读取数组
如何使用与 NewtonSoft (JSON.Net) 组件中的 JSON 匹配的 Swift 类从/向 JSON 读取/写入对象数组?