2014-12-20 95 views
1

我有以下结构:检查是否结构是在阵列

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 
    } 
} 

实例结构被放置在阵列。我需要做的是找出具有这些属性的结构是否在阵列中。我需要比较数据。

事情是这样的:

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不应该添加到数组中。

我的问题什么是正确的方法来做到这一点?

回答

2

您需要的协议Equatable添加到您的结构

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") 
} 
+1

或者只是'if contains(arr,str4)...' –

+1

I编辑答案。包含更符合问题需求。 –