Ich habe eine Antwort-Klasse einen Wert enthalten, und ich habe auch eine Value-Klasse enthalten Daten, die Mappable-Protokoll entsprechen.Swift verschachtelte Generika Typ entspricht nicht dem Protokoll
Jetzt habe ich eine Funktion, um Response-Objekt zu behandeln, aber während ich versuche, die Daten aus Value-Objekt zu bekommen, zeigt es Typ "R" nicht protokollkonform.
Dies ist mein Code auf dem Spielplatz:
aktualisieren
protocol Mappable{
func doSomething()
}
class User: Mappable {
func doSomething() {
}
}
class Book: Mappable {
func doSomething() {
}
}
class Value<T: Mappable>: Mappable{
var data: T?
func doSomething() {
}
}
class Response<T>{
var value: T?
}
func handleResponse< R: Mappable, T:Value<R>>(response:Response<T>, completeHandler: (R?, NSError?)->()){
completeHandler(response.value!.data, nil) //error goes here: Type "R" does not conform to protocol Mappable
}
let response = Response<Value<User>>()
response.value = Value<User>()
response.value?.data = User()
let response2 = Response<Value<Book>>()
response2.value = Value<Book>()
response2.value?.data = Book()
handleResponse(response, completeHandler:{(r,e)in
print(r)
})
handleResponse(response2, completeHandler:{(r,e)in
print(r)
})
Bin ich es richtig zu machen? Oder eine andere Möglichkeit, dies zu erreichen. Danke
Ja, definieren Sie die Funktion wie diese funktioniert. Vielen Dank. – desmond0321
Ich vermute beim Kompilieren, es wusste eigentlich nicht meine Generika R hat das Protokoll konform, also während ich auf Daten in Generika T zugreife, nehme ich an, dass mein R nur ein AnyObject ist. – desmond0321