У меня есть класс Response, содержащий значение, и у меня также есть класс Value, содержащий данные, которые соответствуют протоколу Mappable.Тип swift вложенных генериков не соответствует протоколу
Теперь у меня есть функция для обработки объекта Response, но пока я пытаюсь получить данные из объекта Value, он показывает, что тип «R» не соответствует протоколу.
Это мой код в детскую площадку:
Update
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)
})
Могу ли я делать это правильно? Или любой другой способ добиться этого. Thanks
Да, определите функцию, как это будет работать. Благодарю. – desmond0321
Я подозреваю, что во время компиляции он действительно не знал, что мои дженерики R соответствуют протоколу, поэтому, пока я получаю доступ к данным в generics T, я предполагаю, что мой R просто AnyObject. – desmond0321