Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.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
Swift 检查数组是否包含元素_Swift - Fatal编程技术网

Swift 检查数组是否包含元素

Swift 检查数组是否包含元素,swift,Swift,我想知道为什么下面的方法不起作用: var tmp = [AnyObject] () for (key, value) in dictionary{ if (tmp.contains(value)){ } tmp.append(value as AnyObject) } 看起来没有数组的方法.contain。它迫使我使用其他方法tmp.contains(其中:Bool#>) 但是我不想。我只想检查数组是否包含该特定对象 这是因为任何对象

我想知道为什么下面的方法不起作用:

var tmp = [AnyObject] ()
for (key, value) in dictionary{

        if (tmp.contains(value)){

        } 
      tmp.append(value as AnyObject)
    }
看起来没有数组的方法.contain。它迫使我使用其他方法
tmp.contains(其中:Bool#>)


但是我不想。我只想检查数组是否包含该特定对象

这是因为任何对象都不是可等分的对象。如果有AnyObject数组,则必须自己进行比较。例如,如果使用字符串数组或自定义类,则可以使用Sequence的contains()方法,这是因为AnyObject不是可等分的对象。如果有AnyObject数组,则必须自己进行比较。例如,如果您使用字符串数组或自定义类,那么您可以使用contains()方法的Sequence

我建议从
AnyObject
切换到
AnyHashable
(当然,如果可能的话),因为
AnyHashable
。您的代码如下所示:

var tmp = [AnyHashable]()
var dictionary: [Int: Any] = [1: "Hello1", 2: "Hello2", 3: "Hello3", 4: false, 5: 289 ]
for (key, value) in dictionary{
    if tmp.contains(value as! AnyHashable){
         continue
    }
    tmp.append(value as! AnyHashable)
}

希望有帮助

我建议从
AnyObject
切换到
AnyHashable
(如果可能的话当然可以),因为
AnyHashable
。您的代码如下所示:

var tmp = [AnyHashable]()
var dictionary: [Int: Any] = [1: "Hello1", 2: "Hello2", 3: "Hello3", 4: false, 5: 289 ]
for (key, value) in dictionary{
    if tmp.contains(value as! AnyHashable){
         continue
    }
    tmp.append(value as! AnyHashable)
}

希望有帮助

词典是如何定义的?它包含什么样的值?您是否必须使用
AnyObject
?@MartinR函数定义为func是可转换的(indicate dictionary:[String:Int])->Bool,因此dictionary包含Int作为值。然后最简单的解决方案是将数组定义为
var tmp=[Int]()
@MartinR是很酷,但这是一个研究案例,在现实世界中,我完全不知道数组中会有什么,那么使用Swift这样的语言的目的是什么呢?如果您可以在Obj-C中毫不费力地执行同样的操作。Objective-C中没有
[String:Int]
字典。在Obj-C中,键和值都是NSObject的子类(在Swift中也可以使用)。字典是如何定义的?它包含什么样的值?您是否必须使用
AnyObject
?@MartinR函数定义为func是可转换的(indicate dictionary:[String:Int])->Bool,因此dictionary包含Int作为值。然后最简单的解决方案是将数组定义为
var tmp=[Int]()
@MartinR是很酷,但这是一个研究案例,在现实世界中,我完全不知道数组中会有什么,那么使用Swift这样的语言的目的是什么呢?如果您可以在Obj-C中毫不费力地执行同样的操作。Objective-C中没有
[String:Int]
字典。在Obj-C中,键和值都是NSObject的子类(这也适用于Swift)。