簡體   English   中英

swift 泛型可以在帶有泛型的類中使用嗎

[英]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)

順便說一句, DictionaryNSDictionary之間的橋接並不像 Apple 聲稱的那樣“看似無懈可擊”——我遇到過這樣的情況,我無法弄清楚為什么 Swift 不能自動為我橋接它們,當我有要明確。 有像你指出的那樣不一致的地方。 您的函數將在一個地方將Dictionary作為參數,而不是另一個地方,沒有明確的理由。 也許這與您使用typealias的事實typealias ,但我不確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM