2017-03-02 2 views
-2

Userのインスタンスを含む以下のようなArrayがある場合。最適化アプローチを使用してモデルの配列の要素を置き換える方法は?

class User { 
    var id: String 
    var name: String 

    init(id: String, name: String) { 
    self.id = id 
    self.name = name 
    } 
} 

今が1から5までのIDを有する5つのユーザーモデルがあり、(名前が何であるかに関係なく)、以下のようにアレイに格納されている場合

var userModels = [user1,user2,user3,user4,user5] 

すぐインスタンスIがあるとID 1

let latestUser = User(id: "1", name: "Updated Name") //id 1 is already there but this is the updated model 

を使って手動で作成しています、私はTHIのようにインスタンスを置き換えることができるようにfilterせずに、インデックス1であるユーザモデルのインデックスを検索するどのような方法がありますs

配列の拡張子などを使用しています。index(of:)のプロパティIDの制約はありますか?このよう

let indexOfUser1 = userModels.index(of: latestUser) // It should return 1. 
userModels[indexOfUser1] = latestUser //Replacing the user with id 1 with the latest one 

(私たちはsubscriptがそうであるように)

extension Array where Element: User { 
    //TODO: indexOf constraint for specific property 

} 
+0

あなたは*」とはどういう意味ですかをtのインデックスを見つける彼のインデックスは1 * "のユーザーモデルですか?あなたは「idが1であるユーザモデルのインデックスを見つける」という意味ですか? – Hamish

+0

私は、user1をlatestUserに置き換えて、最適化されたアプローチにしたいと思っています。 –

答えて

1

Equatableを実装します。

class User: Equatable { 
    var id: String 
    var name: String 

    init(id: String, name: String) { 
     self.id = id 
     self.name = name 
    } 

    static func ==(lhs: User, rhs: User) -> Bool { 
     return lhs.id == rhs.id 
    } 
} 

その後、次のことができます。

array.index(of: someUser) 
関連する問題