[英]Can swift generics be used inside class with generics
我有一個協議調用Decodable
:
public protocol Decodable {
typealias DecodedType = Self
static func decode(e: Extractor) -> DecodedType?
}
我有一個函數decode
:
public func decode<T: Decodable where T.DecodedType == T>(object: AnyObject) -> T? {
另外,我有一個類RestApiResponseParser
class RestApiResponseParser<T where T:Decodable> {
private func createServerModels(response: ServerResponse) -> Result<T> {
var parsingError:NSError?
let link: T? = decode(response)
...
}
...
}
和typealias ServerResponse = [String: AnyObject]
我嘗試將其稱為:
let responseParser = RestApiResponseParser<MyModel>(responseData: inputObject as! NSData)
let processError = responseParser.processResponseData()
不幸的是,我收到編譯時錯誤:
這是否意味着,我不能在泛型類中使用泛型函數?
是的,您可以在泛型類中使用泛型函數。 你的問題是,你傳遞一個[String: AnyObject]
字典(這是一個結構,而不是AnyObject
)轉換成期待的一個功能AnyObject
。 看起來您需要使用其鍵從字典中提取AnyObject
:
if let object = response["<insert your key here>"] {
decode(object)
}
另一種方法是將您的ServerResponse
為一個NSDictionary
,它是一個類,因此可以作為AnyObject
傳遞:
let link: T? = decode(response as NSDictionary)
順便說一句, Dictionary
和NSDictionary
之間的橋接並不像 Apple 聲稱的那樣“看似無懈可擊”——我遇到過這樣的情況,我無法弄清楚為什么 Swift 不能自動為我橋接它們,當我有要明確。 有像你指出的那樣不一致的地方。 您的函數將在一個地方將Dictionary
作為參數,而不是另一個地方,沒有明確的理由。 也許這與您使用typealias
的事實typealias
,但我不確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.