Arrays 检查数组是否包含Swift 4中的元素
我试图检查数组Arrays 检查数组是否包含Swift 4中的元素,arrays,swift,Arrays,Swift,我试图检查数组categories是否包含数字1作为Int,因为categories=[Int]()例如categories={1,2,3,4,5} 我尝试了下面的代码,这给了我错误二进制运算符'=='不能应用于'Any'和'Int'类型的操作数。 if categories.contains (where: {$0 == 1}) { // 1 is found } 也尝试了它,但没有下面的where和括号,这给了我同样的错误 if categories.contains { $0 =
categories
是否包含数字1作为Int
,因为categories=[Int]()
例如categories={1,2,3,4,5}
我尝试了下面的代码,这给了我错误二进制运算符'=='不能应用于'Any'和'Int'类型的操作数。
if categories.contains (where: {$0 == 1}) {
// 1 is found
}
也尝试了它,但没有下面的where和括号,这给了我同样的错误
if categories.contains { $0 == 1 } {
// 1 is found
}
我尝试只使用下面的元素,这给了我错误缺少参数标签'where:'in call
if categories.contains(1) {
// 1 is found
}
我该怎么做呢?它正在工作,请在操场上查看我的输出 使用的代码:
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]
您的
类别
数组似乎属于Any类型
解决方法
- 您可以将数组声明为
数组Int
或var categories: [Int]
- 您可以更改以下代码
到 注意:如果您的if categories.contains { $0 == 1 } { // 1 is found }
数组中的元素不是类型类别
Int
UserDefaults
获取其值后,它被声明为[Any]
。我已经检查并找到了解决方案
关于错误消息的信息
二进制运算符“==”不能应用于“Any”和“Int”类型的操作数。
if categories.contains (where: {$0 == 1}) {
// 1 is found
}
您的数组不是Int
数组,而是包含Any
,因此需要在比较之前进行类型转换。数组的声明也是错误的,请使用[]
而不是{}
。并将对象类型转换为int($0 as!int)==1
(我在这里使用强制转换,因为我知道它是一个int数组)
有许多方法可以检查数组是否包含任何元素
1>只要尝试使用guard
获取元素的索引,如果索引为nil,则表示数组不包含该元素。虽然您没有以正确的方式声明数组,但我仍然认为它是一个有效的数组
let categories: [Int] = [1, 2, 3, 4, 5]
guard categories.index(of: 1) != nil else {
print("Doesn't Contain")
return
}
print("Contains")
2>使用包含方法
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
返回与条件匹配的元素数组。因此,如果数组中有多个1
,那么它将为您提供一个包含所有元素的数组。和$0
在枚举数组时描述对象
4>不建议在这种情况下使用
let contains = categories.contains(where: {$0 == 1})
if contains {
print("Contains")
}
else {
print("Doesn't Contain")
}
您是如何声明categories数组的?您的categories声明它不是有效的syntaxiOS Geek提到检查数组声明的。OP在第一行中声明数组是Int
数组。我意识到错误的状态是相反的,这告诉我OP可能错误地声明了数组(就像iOS极客所说的那样)。他没有假设任何事情,我的朋友。是的,@Malik,你是对的,我刚才提到检查数组声明,你没有提到你是从UserDefaults
获取数组的。如果你提到代码的第一行,你会很快得到答案。“0美元”是什么意思@Malik@MohamedEzzat$0
是传递到闭包中的第一个参数。在本例中,当使用包含检查遍历categories数组时,$0
在每次迭代中保存值
let contains = categories.contains(where: {$0 == 1})
if contains {
print("Contains")
}
else {
print("Doesn't Contain")
}