运营商' =='不能应用于两个' [String:AnyObject]'操作数

时间:2017-09-20 14:34:18

标签: ios swift

我在json下面,我希望从这个数组中返回第三个值:

{
1: 2,
2: 33,
3: 7,
4: 0,
5: 25,
6: 8,
7: 66
}

我使用下面的代码获取值:

var eee = Double() //public
var dictionary=[String:AnyObject]() //public

func SendData_ThisWeek(id:String) {

    let url = Property._URL+"ThisWeek/"+id

    Alamofire.request(url).responseJSON { response in

        if let data = response.data {
            let json = String(data: data, encoding: String.Encoding.nonLossyASCII)


            let jsonData = try? JSONSerialization.jsonObject(with: data, options: [])
            guard dictionary == (jsonData as? [String:AnyObject])! else { return }


           self.eee=dictionary["3"] as! Double
}
}

我的问题是什么?

2 个答案:

答案 0 :(得分:2)

不要混淆平等==和作业=运算符。

你不想检查字典是否相等,你想要可选的绑定(分配)字典

顺便说一下,在Swift 3+中,JSON字典是[String:Any]

guard let dictionary = jsonData as? [String:Any] else { return }

答案 1 :(得分:0)

简要回顾:operator == comapares符合Equatable协议的东西。运算符 === 比较两个对象的引用(即它们指向同一块内存)。 检查变量的类型。 as?尝试将变量a返回nil,如果它失败而为!是强制转换。

如果你想将字典用作[String:AnyObject],那么你应该使用:

guard let json as? [String: AnyObject] else { return }
dictionary = json