我再次使用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))
那我该如何明确包装东西呢?我不明白为什么我必须明确地将其包装起来才能正确展开,但这就是它的样子。
答案 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") }