二进制运算符’==’不能应用于’Any?’类型的操作数 和’String’Swift iOS

我有这个var json : [[String : Any]] = [[:]] ,它包含JSON响应,如下所示:

 { "id": "1", "name": "Apple", "category_name": "Fruits" }, { "id": "2", "name": "Black shirt", "category_name": "Fashion" }, { "id": "3", "name": "iPad", "category_name": "Gadgets" } 

我写了一个枚举:

 enum : Int { case fruits = 0, fashion, gadgets } var data = [Categories: [[String: Any]]]() 

然后我有这个方法来排序类别:

 func sortData() { data[.fruits] = self.json.filter({ $0["category_name"] == "Fruits" }) data[.fashion] = self.json.filter({ $0["category_name"] == "Fashion" }) data[.gadgets] = self.json.filter({ $0["category_name"] == "Gadgets" }) } 

之后我收到这样的错误

二进制运算符’ == ‘不能应用于’ Any? ‘类型的操作数Any? ‘和’ String

请告诉我如何解决这个问题?

您应该安全地将左侧的值转换为String ,如下所示:

 data[.fruits] = self.json.filter({ ($0["category_name"] as? String) == "Fruits" }) 

问题是你试图比较不同类型的值,即Any?String 。 要快速解决问题,您可能想尝试说服Swift你的Any? 实际上是一个字符串值。 尝试用( $0["category_name"]替换($0["category_name"] as? String) ,这将把它变成String? 。 然后Swift可以将可选字符串与给定的类别字符串进行比较。