我在约束泛型中使用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对象。
发布于 2017-05-23 15:53:38
您编写了此函数签名:
func jsonToObj<T:DomainResource>(jsonStr: String) -> [T:DomainResource]这说明jsonToObj(jsonStr:)方法返回一个字典,其键为T类型,其值为DomainResource类型。看起来,您只想编写这个函数签名:
func jsonToObj<T:DomainResource>(jsonStr: String) -> [T]https://stackoverflow.com/questions/44139423
复制相似问题