2

単純な構造体を作成し、Equatable プロトコルを実装しました。

extension MyModelStruct: Equatable {}

func ==(lhs: NModelMatch, rhs: NModelMatch) -> Bool {
    let areEqual = lhs.id == rhs.id
    return areEqual
}

public struct MyModelStruct {

    var id : String?
    var staticId : String?

    init(fromDictionary dictionary: NSDictionary){
        id = dictionary["id"] as? String
        ...
}

次に、私のプロジェクトで [MyModelStruct] の配列を取得します。何をすべきかは、同じ ID を持つすべての MyModelStruct を削除することです

let val1 = MyModelStruct(id:9, subId:1)
let val2 = MyModelStruct(id:10, subId:1)
let val3 = MyModelStruct(id:9, subId:10)

var arrayOfModel = [val1,val2,val3]; // or set but i do not know how to use a set
var arrayCleaned = cleanFunction[M2,M3] 

cleanFunction を作成するにはどうすればよいですか?

誰か助けてください。全てに感謝。Xcode : バージョン 7.3.1

4

4 に答える 4

1

セットを使用する方が良いことに同意します。var arrayOfModel: Set = [val1, val2, val3] のように、配列を使用して Set を初期化できるはずです。ただし、カスタム タイプを使用しているため、MyModelStruct が hashable に準拠していることを確認する必要があります。 このリンクには適切な説明があります。

ただし、配列を使用する場合は、変更する必要があります

let areEqual = rhs.id == lhs.id

let areEqual = rhs.id == lhs.id && rhs.subId == lhs.subId)

subId プロパティを持つように構造体を変更する必要があります (そして変数を String ではなく Int にします)。

あなたの質問への答えとして、はい、配列を反復処理する必要があります。

于 2016-07-01T21:20:43.313 に答える