2017-03-02 1 views
-2

Wenn es einen Array wie folgt gibt, der User Instanzen enthält.Wie ersetzt man das Element in einem Array von Modellen mit einem optimierten Ansatz?

class User { 
    var id: String 
    var name: String 

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

Nun, wenn es 5 Benutzermodelle IDs von 1 bis 5 und sind in der Anordnung, wie unten (ganz gleich, was der Name ist) gespeichert

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

Jetzt gibt nehme eine Instanz I manuell mit id 1

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

ist es eine Möglichkeit, den Index des Benutzermodell zu finden, dessen Index 1 ohne filter so, dass ich die Instanz wie thi erschaffe ersetzen s

Verwenden Array-Erweiterung oder irgendetwas. Können wir die Einschränkung für index(of:) für Eigenschaft ID ???

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

so (wie wir die subscript)

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

} 
+0

Was meinen Sie mit „* finde den Index von t Das Benutzermodell, dessen Index 1 * "ist? Meintest du "den Index des Benutzermodells finden, dessen' id' 1 ist? " – Hamish

+0

Ich möchte Benutzer1 durch LatestUser mit optimierten Ansatz ersetzen. –

Antwort

1

Equatable Implement:

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

Dann können Sie:

array.index(of: someUser) 
Verwandte Themen