我正在尝试检查数组categories
是否包含Int
后的数字categories = [Int]()
,例如categories = {1, 2, 3, 4, 5}
我尝试了下面的代码,它给了我错误Binary operator '==' cannot be applied to operands of type 'Any' and 'Int'
if categories.contains (where: {$0 == 1}) {
// 1 is found
}
也试过没有下面的where和括号,这给了我同样的错误
if categories.contains { $0 == 1 } {
// 1 is found
}
我尝试使用下面的元素,这给了我错误Missing argument label 'where:' in call
if categories.contains(1) {
// 1 is found
}
我该怎么做?
答案 0 :(得分:4)
您的category
数组似乎属于Any
解决问题的方法
您可以将数组声明为Int
数组
var categories: [Int]
或强>
您可以更改以下代码
if categories.contains { $0 == 1 } {
// 1 is found
}
到
if categories.contains { ($0 as! Int) == 1 } {
// 1 is found
}
注意:如果category
数组的元素不是Int
答案 1 :(得分:2)
它正常工作请参阅PlayGround中的输出
使用的代码:
var categories : [Int] = [0,1,2,3,4,5,6,7,8,9]
if categories.contains(5)
{
print("Yes it contains")
}
else
{
print("it do not")
}
并且此条件正在运行
if categories.contains (where: {$0 == 1}) {
print("yes")
}
请参阅您的阵列声明我认为存在主要问题
宣言1:
var categories = [Int]()
categories = [0,1,2,3,4,5,6,7,8,9]
宣言2:
var categories : [Int] = [0,1,2,3,4,5,6,7,8,9]
答案 2 :(得分:0)
感谢您的评论让我检查了数组的声明,问题是在我从[Any]
获取值之后被声明为UserDefaults
。我已经检查并在How do I save an Int array in Swift using NSUserDefaults?
// old declaration
let categories = userDefaults.array(forKey:"categories") ?? [Int]()
// new correct declaration
var categories = [Int]()
if let temp = userDefaults.array(forKey:"categories") as? [Int] {
categories = temp
}
答案 3 :(得分:0)
关于错误消息
Binary operator '==' cannot be applied to operands of type 'Any' and 'Int'
您的数组不是Int
数组,而是包含Any
,因此在比较之前需要进行类型转换。使用[]
而不是{}
使用数组声明也是错误的。和类型转换对象作为int ($0 as! Int) == 1
(我在这里使用强制转换,因为我知道它是一个Int数组)。
有很多方法可以检查数组是否包含任何元素。
1> 如果index为nil,则尝试使用guard
获取元素的索引意味着数组不包含该元素。虽然你没有以正确的方式声明数组,但我认为它是一个有效的数组。
let categories: [Int] = [1, 2, 3, 4, 5]
guard categories.index(of: 1) != nil else {
print("Doesn't Contain")
return
}
print("Contains")
2> 使用contains
方法
if (categories.contains(1)) {
print("Contains")
}
else {
print("Doesn't Contain")
}
3> 不推荐用于此案例但仍然可以获得此
let result = categories.filter({$0 == 1})
if result.count == 0 {
print("Doesn't Contain")
}
else {
print("Contains")
}
filter
返回一个与condition匹配的元素数组。因此,如果数组中有多个1
,那么它将为您提供所有元素的数组。 $0
在枚举数组时描述了对象。
4> 不推荐用于此案例
let contains = categories.contains(where: {$0 == 1})
if contains {
print("Contains")
}
else {
print("Doesn't Contain")
}