2017-03-04 32 views
0

林更新我的应用程序快捷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 { 

对不起已故的答复

问候

特拉维斯

+0

下半年的错误分别是// 2和// 4 – travis

回答

0

您正在使用太多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") 
    } 
} 
+0

嗨,我刚刚试过这个。这工作,但我仍然在我的JSON.swift文件中出现错误我刚刚意识到 – travis

+0

请考虑Swift 3中未指定的JSON类型是“Any” – vadian