簡體   English   中英

帶約束的Swift快速轉換為泛型

[英]Swift Cast to Generic Type with Constraint

我正在使用帶有受約束的泛型 (即where子句)的Swift 3。 我嘗試進行泛型類型轉換時遇到問題。 這是問題的簡化示例:

func jsonToObj<T:DomainResource>(jsonStr: String) -> [T:DomainResource] {
    let json = JSON(parseJSON: jsonStr).dictionaryObject
    let bundle = SMART.Bundle(json: json)

    let result = bundle.entry?.map() {
        return $0.resource as! T
    }

    return result!
}

我的問題是,當我從方法返回時,編譯器抱怨無法將類型[T]轉換為類型[T:DomainResource] 如果我從泛型中刪除DomainResource約束,那么它將編譯並運行良好。

那不是我想要的,所以,我嘗試了這個:

let result = bundle.entry?.map() {
    return $0.resource as! T:DomainResource
}

Swift似乎不知道那意味着什么。 關於如何解決此問題的任何想法嗎? 如果可能的話,我不僅希望將它們全部投射到DomainResource對象。

您編寫了以下函數簽名:

func jsonToObj<T:DomainResource>(jsonStr: String) -> [T:DomainResource]

這表示jsonToObj(jsonStr:)方法返回一個字典,該字典的鍵類型為T ,其值類型為DomainResource 看起來您只想編寫以下函數簽名:

func jsonToObj<T:DomainResource>(jsonStr: String) -> [T]

暫無
暫無

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

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