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

时间:2014-06-04 12:39:33

标签: swift

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

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

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

一般情况下它工作得很好,但是一旦我放了一个字符串!在String类型的数组中,它崩溃了。尽管containsObject确实采用了AnyObject!

        var str : String! = "bla"
        var c = Array<String>();
        c.append(str)
        println(c.contains(str))

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

        var str : String! = "bla"
        var c = Array<String!>();
        c.append(str)
        println(c.contains(str))

但是如果没有!那么正常

        var str : String = "bla"
        var c = Array<String>();
        c.append(str)
        println(c.contains(str))

那我该如何明确包装东西呢?我不明白为什么我必须明确地将其包装起来才能正确展开,但这就是它的样子。

3 个答案:

答案 0 :(得分:74)

Swift 1:

let array = ["1", "2", "3"]
let contained = contains(array, "2")
println(contained ? "yes" : "no")

斯威夫特2,3,4:

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

答案 1 :(得分:2)

夫特

如果您没有使用对象,则可以使用此代码进行包含。

let elements = [ 10, 20, 30, 40, 50]

if elements.contains(50) {

   print("true")

}

如果你在swift中使用NSObject类。这个变量是根据我的要求。你可以修改你的要求。

var cliectScreenList = [ATModelLeadInfo]()
var cliectScreenSelectedObject: ATModelLeadInfo!

这是针对相同的数据类型。

{ $0.user_id == cliectScreenSelectedObject.user_id }

如果您想要AnyObject类型。

{ "\($0.user_id)" == "\(cliectScreenSelectedObject.user_id)" }

完整条件

if cliectScreenSelected.contains( { $0.user_id == cliectScreenSelectedObject.user_id } ) == false {

cliectScreenSelected.append(cliectScreenSelectedObject)

print("Object Added")

} else {

print("Object already exists")

}

答案 2 :(得分:1)

通常,当您想要一个包含自定义对象或结构的数组,并且要使用“包含”功能时,您的类或结构应符合“ Equatable”协议,并且应实现“ = =“用于以后比较的功能...

struct booy: Equatable{
static func == (lhs: booy, rhs: booy) -> Bool {
    return lhs.name == rhs.name
}

var name = "abud"
}

let booy1 = booy(name: "ali")
let booy2 = booy(name: "ghasem")

var array1 = [booy]()
array1.append(booy1)
array1.append(booy2)

let booy3 = booy(name: "ali")

if array1.contains(booy3){
    print("yes") }