我有以下结构:
struct MyStrict {
let prop1: String
let prop2: [String: NSData]
let prop3: [String]
init (prop11: String, prop22: [String : NSData], prop33: [String]) {
prop1 = prop11
prop2 = prop22
prop3 = prop33
}
}
实例结构放在Array中。我需要做的是找出具有这些属性的结构是否在数组中。我需要比较数据。
这样的事情:
var arr = [MyStrict]()
var str1 = MyStrict(prop11: "test1", prop22: ["aa": NSData()], prop33: ["bb"])
arr.append(str1)
var str2 = MyStrict(prop11: "test2", prop22: ["bb": NSData()], prop33: ["cc"])
arr.append(str2)
var str3 = MyStrict(prop11: "test3", prop22: ["cc": NSData()], prop33: ["dd"])
arr.append(str3)
var str4 = MyStrict(prop11: "test1", prop22: ["aa": NSData()], prop33: ["bb"]) // has the same data as str1
arr.append(str4)
正如您所看到的,str1
和str4
具有相同的数据。因此str4
不应添加到数组中。
我的问题是什么是正确的方法?
答案 0 :(得分:2)
您需要将协议添加到您的Struct
struct MyStrict: Equatable {
...
}
然后你必须在类下面添加==运算符:
func == (lhs: MyStrict, rhs: MyStrict) -> Bool {
if lhs.prop1 == rhs.prop1 && lhs.prop3 == rhs.prop3 && lhs.prop2 == rhs.prop2 {
return true
}
return false
}
现在,要知道你的结构是否已经在数组中,你只需要使用它:
if contains(arr, str4) == true {
println("already in")
} else {
println("Not in")
}