Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 检查数组是否包含Swift 4中的元素_Arrays_Swift - Fatal编程技术网

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