簡體   English   中英

二進制運算符'=='不能應用於'Any?'類型的操作數 和'String'Swift iOS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM