我有一个Response类包含一个值,并且我也有一个Value类包含符合Mappable协议的数据。Swift嵌套泛型类型不符合协议
现在我有一个函数来处理Response对象,但是当我试图从Value对象中获取数据时,它显示类型“R”不符合协议。
这是我在操场代码:
更新
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)
})
我这样做对吗?或者以任何其他方式来实现这一点。 谢谢
是的,定义这样的功能将起作用。谢谢。 – desmond0321
我怀疑编译时,它实际上并不知道我的泛型R符合协议,所以当我访问泛型T中的数据时,它假设我的R只是一个AnyObject。 – desmond0321