Ios 更新到swift 3 JSON文件
我正在更新我的应用到swift 3 我有几个错误Ios 更新到swift 3 JSON文件,ios,swift,xcode,Ios,Swift,Xcode,我正在更新我的应用到swift 3 我有几个错误 for (k, v): (AnyObject, AnyObject) in value { 获取NSDictionary.Iterator.Element不可转换为(Anyobject,Anyobject) 因此,我得到了这个错误 var artworks = [Artwork]() func loadInitialData() { // 1 let fileName = Bundle.main.path(forResou
for (k, v): (AnyObject, AnyObject) in value {
获取NSDictionary.Iterator.Element不可转换为(Anyobject,Anyobject)
因此,我得到了这个错误
var artworks = [Artwork]()
func loadInitialData() {
// 1
let fileName = Bundle.main.path(forResource: "PublicArt", ofType: "json");
let data: Data = try! Data(contentsOf: URL(fileURLWithPath: fileName!), options: NSData.ReadingOptions(rawValue: 0))
// 2
var error: NSError?
let jsonObject: AnyObject!
do {
jsonObject = try JSONSerialization.jsonObject(with: data,
options: JSONSerialization.ReadingOptions(rawValue: 0))
} catch let error1 as NSError {
error = error1
jsonObject = nil
}
// 3
if let jsonObject = jsonObject as? [String: AnyObject], error == nil,
// 4
let jsonData = JSONValue.fromObject(jsonObject)?["data"]?.array {
for artworkJSON in jsonData {
if let artworkJSON = artworkJSON.array,
// 5
let artwork = Artwork.fromJSON(artworkJSON) {
artworks.append(artwork)
}
}
}
}
JsonObject生成的“Any”不是预期的上下文结果类型
“任何对象”
及
参数类型[字符串:AnyObject]与预期类型不符
“任何对象”
我想这很简单,但我已经一年没写代码了,非常感谢你们的帮助
谢谢
特拉维斯
更新
所以我只是更新了代码
但是在JSON.swift文件中获取错误
static func fromObject(_ object: AnyObject) -> JSONValue? {
switch object {
case let value as NSString:
return JSONValue.jsonString(value as String)
case let value as NSNumber:
return JSONValue.jsonNumber(value)
case _ as NSNull:
return JSONValue.jsonNull
case let value as NSDictionary:
var jsonObject: [String:JSONValue] = [:]
for (k, v): (AnyObject, AnyObject) in value {
if let k = k as? NSString {
if let v = JSONValue.fromObject(v) {
jsonObject[k as String] = v
} else {
return nil
}
}
}
return JSONValue.jsonObject(jsonObject)
case let value as NSArray:
var jsonArray: [JSONValue] = []
for v in value {
if let v = JSONValue.fromObject(v as AnyObject) {
jsonArray.append(v)
} else {
return nil
}
}
return JSONValue.jsonArray(jsonArray)
default:
return nil
}
}
}
错误是:
nsdictionary.iterate.element'(aka(key:Any,value:Any)')不可用
可转换为“任意对象,任意对象”
用于代码行
for (k, v): (AnyObject, AnyObject) in value {
很抱歉迟了答复
问候
特拉维斯你使用了太多的
任何对象
也就是它是一个对象,但我不知道它的类型
因为JSON文件在您的包中,所以您确切地知道所有对象的类型
在Swift 3中,JSON字典是[String:Any]
,JSON数组是[[String:Any]]
但是,我不知道JSON的确切结构,也不知道JSONValue
做了什么——实际上不需要第三方库——但这可能是获取键数据的数组的起点
func loadInitialData() {
let fileURL = Bundle.main.url(forResource: "PublicArt", withExtension: "json")!
do {
let data = try Data(contentsOf: fileURL, options: [])
let jsonObject = try JSONSerialization.jsonObject(with: data) as! [String: Any]
let jsonData = jsonObject["data"] as! [[String:Any]]
for artworkJSON in jsonData {
print(artworkJSON)
// ... create Artwork items
}
} catch {
print(error)
fatalError("This should never happen")
}
}
下半场的错误分别在//2和//4。嗨,我刚刚试过这个。这是可行的,但我的JSON.swift文件中仍然有一个错误。我刚刚意识到,考虑到swift3中未指定的JSON类型是Any