我试图循环从HTTP请求中获得的JSON数组,但我不确定如何循环。
我试过的是:
var request = NSMutableURLRequest(url: url! as URL, cachePolicy: NSURLRequest.CachePolicy.returnCacheDataElseLoad, timeoutInterval: Double.infinity)
if Reachability.isConnectedToNetwork(){
request = NSMutableURLRequest(url: url! as URL, cachePolicy: NSURLRequest.CachePolicy.useProtocolCachePolicy, timeoutInterval: Double.infinity);
}
let session = URLSession.shared
var getResp = false
var zinnen : [Zin] = []
let task = session.dataTask(with: request as URLRequest,
completionHandler: { data, response, error -> Void in
let json = try? JSONSerialization.jsonObject(with: data!, options: []) as? [String: Any]
for case let data in json {
if let zin = Zin(json: data) {
zinnen.append(zin)
}
}
})
task.resume()
这是我的结构:
struct Zin : CustomStringConvertible {
var description: String
let id : Int
let dutch_sentence : String
let polish_sentence : String
init(dictionary: [String: Any]) {
self.id = dictionary["id"] as? Int ?? 0
self.dutch_sentence = dictionary["dutch_sentence"] as? String ?? ""
self.polish_sentence = dictionary["polish_sentence"] as? String ?? ""
}
}
JSON数组的示例:
[
{
"id":"35",
"dutch_sentence":"Ja",
"polish_sentence":"Tak"
},
{
"id":"36",
"dutch_sentence":"Nee",
"polish_sentence":"Nie"
}
]
但在这件事上我得到了错误
“字符串:有吗?”不符合协议“顺序”
发布于 2017-12-14 14:03:11
不要忽视错误!try?
和可选的下播都会导致嵌套的可选(Optional<Optional<[String:Any]>>
),这当然不是序列,即使在被抛入数组时也不是。
处理错误,可选地绑定结果,并将结果强制转换到更指定的数组 [[String:String]]
。根据JSON,id
的值是String
,而不是Int
。
do {
if let json = try JSONSerialization.jsonObject(with: data!) as? [[String: String]] {
for zinData in json {
let zin = Zin(dictionary: zinData)
zinnen.append(zin)
}
}
} catch { print(error) }
PS:Zin
类中的初始化程序与解析代码中的初始化器不匹配。我在用这门课的版本。您必须将id
类型从Int
更改为String
https://stackoverflow.com/questions/47813737
复制相似问题