检查数组是否包含Swift 4中的元素

时间:2018-02-02 04:17:31

标签: arrays swift

我正在尝试检查数组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
}

我该怎么做?

4 个答案:

答案 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中的输出

enter image description here

使用的代码:

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