【发布时间】:2017-03-04 03:01:49
【问题描述】:
我正在将我的应用更新为 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' 不是预期的上下文结果类型 '任何对象'
和
参数类型 [String : 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)') 不是 可转换为 'AnyObject, AnyObject)'
代码行
for (k, v): (AnyObject, AnyObject) in value {
抱歉回复晚了
问候
特拉维斯
【问题讨论】:
-
下半场的错误分别在//2和//4