大量的Java经验,但与Swift的相对n00b。我有以下JSON,我无法提取“图像”数组,这可能有多达3个图像......
{
"status" : "OPEN",
"description" : “…”,
"name" : “…”,
"owner" : 1,
"images" : [
{
"id" : 1,
"path" : "\/uploads\/1-60003456.jpeg"
}
],
"created" : 1459135829000,
"id" : 1
}
我一直遇到很多编译时和运行时错误。例如,来自SwiftyJSON文档的代码:
for (key,subJson):(String, JSON) in json {
if(key == "images"){
let myImages = subJson.array
print(myImages![0]["path"])
}
}
正确地打印出“path”的值,但是试图在我的[String]图像中保存该值:
images.append(myImages![0]["path"] as String)
给出错误“无法使用String类型的索引下标类型JSON的值”
XCode告诉我subJson是一个用于“images”的NSDictionary(或者它是一个字典数组?),但是,当我尝试这样做时,我得到“无法转换类型JSON的值以在coersion中键入NSDictionary ”
我确定这是一个简单的语法错误,但在这一点上,我只是在各种错误之间来回走动。感谢您提供任何指导。
答案 0 :(得分:0)
不要使用向下转换,SwiftyJSON已经完成了这项工作。 SwiftyJSON有一个可选的getter,用于表示已经解析的对象的字符串表示:
myImages![0]["path"].string
因为它是一个可选项,你想安全地打开它:
if let path = myImages![0]["path"].string {
images.append(path)
}
如果myImages![0]["path"]
不是String,那么SwiftyJSON为您提供与JSON类型一样多的可选getter:
myImages![0]["path"].array
myImages![0]["path"].dictionary
myImages![0]["path"].int
等
使用SwiftyJSON,你也可以直接下标:
if let firstImagePath = json["images"][0]["path"].string {
// use "firstImagePath"
}
总结一下,另一种循环:
if let images = json["images"] {
for image in images {
if let path = image["path"].string {
// use "path"
}
}
}