Ios 更新到swift 3 JSON文件

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

我正在更新我的应用到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(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