快速转换为具有约束的通用类型

标签 swift generics types casting

我正在使用 Swift 3 和 constrained generics (即 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
}

Swift 似乎不知道那是什么意思。关于如何解决此问题的任何想法?如果可能的话,我不想将它们全部转换为 DomainResource 对象。

最佳答案

你写了这个函数签名:

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

这表示 jsonToObj(jsonStr:) 方法返回一个字典,其键为 T 类型,其值为 DomainResource 类型.看起来您只想编写此函数签名:

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

关于快速转换为具有约束的通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44139423/

相关文章:

ios - swift : Get tableView indextPath/textLabel from selected UIView

arrays - 如何调用 Swift Array.indexOf?

java - 什么时候在 Java 中使用泛型类合适

java - 这会导致可变参数造成堆污染吗?

scala - 在 trait 中实现方法的规则是什么?

types - 这个 clojure.core.typed 类型错误是什么意思?

Oracle SYSTPH* 类型

ios - 在 swift 中添加 Nsattributed 字符串和字符串

arrays - 苹果 swift : Initialize Array of Generic Type

ios - UICollectionView