我有一個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