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