SwiftyJSON - 表达式不明确

SwiftyJSON - expression is ambiguous

我尝试使用 SwiftyJSON 解析 JSON,但我遇到了问题。

我使用 here

中的教程

这是我的代码

var JSONStorage : [Article?]?
var objects = [[String: String]]()

override func viewDidLoad() {
    super.viewDidLoad()

    let number = arc4random_uniform(1000)
    let urlString = "http://78.27.190.58:3200/api/get_article/17?\(number)"

    if let url = NSURL(string: urlString) {
        if let data = try? NSData(contentsOfURL: url, options: []) {
            let json = JSON(data: data)

            for element in json["article"].arrayValue {

                let id = Int(element["id"].stringValue)
                let title = element["title"].stringValue
                let subtitle = element["subtitle"].stringValue
                let body = element["body"].stringValue
                let img = element["images"]["main"].rawValue
                let obj = ["id": id, "title": title, "subtitle": subtitle, "body": body, "img": img]


                objects.append(obj)

            }

        }
    }

}

这是我得到的错误

我做错了什么?

swift中的数组或字典不能是异构的。如果您查看您的代码,您希望将一个 int 和四个字符串作为 obj 的值。

这会起作用:

for element in json["article"].arrayValue {

            let id = element["id"].stringValue // must be string to put it in obj
            let title = element["title"].stringValue
            let subtitle = element["subtitle"].stringValue
            let body = element["body"].stringValue
            let img = element["images"]["main"].rawValue
            let obj: [String: String] = ["id": id, "title": title, "subtitle": subtitle, "body": body, "img": img]


            objects.append(obj)

        }

您的 objects[[String:String]] 类型,一个字典数组。这些字典的键类型为 String,值类型为 String

但是你向这个数组添加了一个包含不同类型值的字典:Strings 和你的 .stringValue 对象,以及一个 .rawValue 必须是 NSData 类型的我认为.

一个解决方案可能是键入字典 [String:AnyObject](以及数组 [[String:AnyObject]])并在检索值时在另一端进行类型转换。

顺便说一句,编译器说 "expression is ambiguous" 因为它无法推断数组的类型(现在我们知道原因了)。

请注意,解析 JSON 时效率不是最高的。更好的方法是从您的数据创建对象:类 或结构。例如,你可以有一个结构 Article 来保存每个 element 值,就像你在另一个问题中展示的那样。