检查结构是否在数组中

时间:2014-12-20 11:29:13

标签: ios arrays macos swift struct

我有以下结构:

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)

正如您所看到的,str1str4具有相同的数据。因此str4不应添加到数组中。

我的问题是什么是正确的方法?

1 个答案:

答案 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")
}