[英]Binary operator '==' cannot be applied to operands of type 'Any?' and '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?
'和'String
'
請告訴我該如何解決?
問題在於您正在嘗試比較不同類型的值,即“是” Any?
和String
。 為了快速解決問題,您可能需要嘗試說服Swift,讓您知道Any?
實際上是一個字符串值。 嘗試將$0["category_name"]
替換$0["category_name"]
($0["category_name"] as? String)
,這會將其轉換為String?
。 然后,Swift將能夠將可選字符串與給定的類別字符串進行比較。
您應該安全地將左側的值強制轉換為String
,如下所示:
data[.fruits] = self.json.filter({ ($0["category_name"] as? String) == "Fruits" })
迅捷5
更改以下代碼
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" })
}
至
func sortData() {
data[.fruits] = self.json.filter({ $0["category_name"] as? String == "Fruits" })
data[.fashion] = self.json.filter({ $0["category_name"] as? String == "Fashion" })
data[.gadgets] = self.json.filter({ $0["category_name"] as? String == "Gadgets" })
}
這將修復錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.