我正在使用带有constrained generics的Swift 3(即where
子句)。当我尝试进行泛型类型转换时,我遇到了问题。以下是该问题的简化示例:
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
}
斯威夫特似乎并不知道这意味着什么。关于如何解决这个问题的任何想法?如果可能的话,我不想把它们全部投放到DomainResource
个对象上。
答案 0 :(得分:1)
你写了这个函数签名:
func jsonToObj<T:DomainResource>(jsonStr: String) -> [T:DomainResource]
这表示jsonToObj(jsonStr:)
方法返回一个字典,其键的类型为T
,其值为DomainResource
。看起来你只想写这个函数签名:
func jsonToObj<T:DomainResource>(jsonStr: String) -> [T]