更新到SWIFT 3 JSON文件
问题描述:
林更新我的应用程序快捷3更新到SWIFT 3 JSON文件
我得到了几个错误的
for (k, v): (AnyObject, AnyObject) in value {
获取一个NSDictionary.Iterator.Element没有可转换到(Anyobject,Anyobject)
Subsiquently即时得到这个错误
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产生 '任意' 不期望的内容相关的结果类型 'AnyObject'
和
参数类型[字符串:AnyObject]不符合预期类型 'AnyObject'
我假设这是一个容易的,但我没有在一年内编码,将非常赞赏的帮助
谢谢
特拉维斯
UPDATE
所以我刚刚更新的代码
,但得到的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 '(又名(标号:任意,值:任何)')不是 转换为 'AnyObject,AnyObject)'
对代码行
for (k, v): (AnyObject, AnyObject) in value {
对不起已故的答复
问候
特拉维斯
答
您正在使用太多AnyObject
又名它是一个对象,但我不知道该类型。
由于JSON文件在您的包中,您完全知道所有对象的类型。
在Swift 3中,JSON字典是[String:Any]
,JSON数组是[[String:Any]]
。
但是我不知道JSON的确切结构,我不知道JSONValue
的作用 - 第三方库实际上并不是必需的 - 但这可能是获取关键字data
的阵列的起点。
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 – travis