当前位置: 首页 > 知识库问答 >
问题:

二进制运算符==不能应用于任何类型的操作数?和字符串SwiftiOS

萧焱
2023-03-14

我有一个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”类型的操作数 ”和“<代码>字符串

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


共有3个答案

况野
2023-03-14

Swift 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" })
    }

这将修复错误。

公冶子安
2023-03-14
匿名用户

问题是,您试图比较不同类型的值,即任何 和字符串。要快速解决问题,您可能需要尝试说服Swift您的<代码>有吗 实际上是一个字符串值。请尝试将$0[“category\u name”]替换为($0[“category\u name”]为?字符串),这会将其转换为字符串。然后,Swift将能够将可选字符串与给定的类别字符串进行比较。

孙弘博
2023-03-14

您应该安全地将左侧的值强制转换为字符串,如下所示:

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