二元运算符“==”不能应用于 '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({ [=16=]["category_name"] == "Fruits" })
data[.fashion] = self.json.filter({ [=16=]["category_name"] == "Fashion" })
data[.gadgets] = self.json.filter({ [=16=]["category_name"] == "Gadgets" })
}
之后我得到这样的错误
Binary operator '==
' cannot be applied to operands of type 'Any?
' and
'String
'
请告诉我如何解决这个问题?
您应该安全地将左侧的值转换为 String
,如下所示:
data[.fruits] = self.json.filter({ ([=10=]["category_name"] as? String) == "Fruits" })
问题是您正在尝试比较不同类型的值,即 Any?
和 String
。要快速解决问题,您可能需要尝试说服 Swift 您的 Any?
实际上是一个字符串值。尝试将 [=13=]["category_name"]
替换为 ([=14=]["category_name"] as? String)
,这会将其变成 String?
。 Swift 然后将能够将可选字符串与您给定的类别字符串进行比较。
Swift 5
更改
中的以下代码
func sortData() {
data[.fruits] = self.json.filter({ [=10=]["category_name"] == "Fruits" })
data[.fashion] = self.json.filter({ [=10=]["category_name"] == "Fashion" })
data[.gadgets] = self.json.filter({ [=10=]["category_name"] == "Gadgets" })
}
至
func sortData() {
data[.fruits] = self.json.filter({ [=11=]["category_name"] as? String == "Fruits" })
data[.fashion] = self.json.filter({ [=11=]["category_name"] as? String == "Fashion" })
data[.gadgets] = self.json.filter({ [=11=]["category_name"] as? String == "Gadgets" })
}
这将修复错误。
我有这个 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({ [=16=]["category_name"] == "Fruits" })
data[.fashion] = self.json.filter({ [=16=]["category_name"] == "Fashion" })
data[.gadgets] = self.json.filter({ [=16=]["category_name"] == "Gadgets" })
}
之后我得到这样的错误
Binary operator '
==
' cannot be applied to operands of type 'Any?
' and 'String
'
请告诉我如何解决这个问题?
您应该安全地将左侧的值转换为 String
,如下所示:
data[.fruits] = self.json.filter({ ([=10=]["category_name"] as? String) == "Fruits" })
问题是您正在尝试比较不同类型的值,即 Any?
和 String
。要快速解决问题,您可能需要尝试说服 Swift 您的 Any?
实际上是一个字符串值。尝试将 [=13=]["category_name"]
替换为 ([=14=]["category_name"] as? String)
,这会将其变成 String?
。 Swift 然后将能够将可选字符串与您给定的类别字符串进行比较。
Swift 5
更改
中的以下代码func sortData() {
data[.fruits] = self.json.filter({ [=10=]["category_name"] == "Fruits" })
data[.fashion] = self.json.filter({ [=10=]["category_name"] == "Fashion" })
data[.gadgets] = self.json.filter({ [=10=]["category_name"] == "Gadgets" })
}
至
func sortData() {
data[.fruits] = self.json.filter({ [=11=]["category_name"] as? String == "Fruits" })
data[.fashion] = self.json.filter({ [=11=]["category_name"] as? String == "Fashion" })
data[.gadgets] = self.json.filter({ [=11=]["category_name"] as? String == "Gadgets" })
}
这将修复错误。