Swift数组并包含,如何确定集合是否包含对象或值?

Dai*_*jan 30 swift

我再次使用swift数组和仅由NSArray提供的containsObject!

我将swift数组桥接到NSArray,包含:

extension Array {
    func contains(object:AnyObject!) -> Bool {
        if(self.isEmpty) {
            return false
        }
        let array: NSArray = self.bridgeToObjectiveC();
        return array.containsObject(object)
    }
}
Run Code Online (Sandbox Code Playgroud)

它一般工作正常,但只要我放一个字符串!在String类型的数组中,它崩溃了.尽管containsObject确实采用了AnyObject!

        var str : String! = "bla"
        var c = Array<String>();
        c.append(str)
        println(c.contains(str))
Run Code Online (Sandbox Code Playgroud)

声明一个字符串!数组也没有帮助

        var str : String! = "bla"
        var c = Array<String!>();
        c.append(str)
        println(c.contains(str))
Run Code Online (Sandbox Code Playgroud)

但同样没有!工作正常

        var str : String = "bla"
        var c = Array<String>();
        c.append(str)
        println(c.contains(str))
Run Code Online (Sandbox Code Playgroud)

那怎么我明确包装东西?我真的不明白为什么我必须明确地包装它,所以它是正确的解开,但这就是它的样子.

jer*_*e10 74

斯威夫特1:

let array = ["1", "2", "3"]
let contained = contains(array, "2")
println(contained ? "yes" : "no")
Run Code Online (Sandbox Code Playgroud)

斯威夫特2,3,4:

let array = ["1", "2", "3"]
let contained = array.contains("2")
print(contained ? "yes" : "no")
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,如果您使用自定义对象,请确保您的对象遵循[Equatable协议](http://nshipster.com/swift-default-protocol-implementations/). (8认同)