二进制运算符’==’不能应用于’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可以将可选字符串与给定的类别字符串进行比较。