J'ai une classe Response contenant une valeur, et j'ai aussi une classe Value qui contient des données conformes au protocole Mappable.Le type de génériques imbriqués Swift n'est pas conforme au protocole.
Maintenant j'ai une fonction pour gérer l'objet Response, mais pendant que j'essaie de sortir les données de l'objet Value, le type "R" n'est pas conforme au protocole.
C'est mon code dans la cour:
Mise à jour
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)
})
Suis-je le fais bien? Ou tout autre moyen pour y parvenir. Merci
Oui, définissez la fonction comme ceci fonctionnera. Merci. – desmond0321
Je soupçonne en compilant, en fait, ne pas connaître mes génériques R a conformer le protocole, donc pendant que j'accède aux données dans les génériques T, il suppose que mon R est juste un AnyObject. – desmond0321