Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift转换为带约束的泛型类型_Swift_Generics_Types_Casting - Fatal编程技术网

Swift转换为带约束的泛型类型

Swift转换为带约束的泛型类型,swift,generics,types,casting,Swift,Generics,Types,Casting,我正在使用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 =

我正在使用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!
}

斯威夫特似乎不知道这意味着什么。你知道如何解决这个问题吗?如果可能的话,我不想将它们全部强制转换为DomainResource对象。

您编写了以下函数签名:

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

删除约束不是您想要的,这是什么意思?[T:DomainResource]不是受DomainResource约束的T数组,它是一个字典。你只需要[T]。占位符T在占位符声明中仍被约束为DomainResource。虽然映射中强制转换到T的方法看起来仍然有点不确定,但是您确定它对于任何具体类型的T都不会失败吗?这个[T:DomainResource]是错误的返回类型。你还了一本字典,而不仅仅是T。对,我还了一本字典。这是有道理的。此外,是的,我们正在根据标准映射数据,这就是为什么as!总是有效的,就是这样。非常感谢。
func jsonToObj<T:DomainResource>(jsonStr: String) -> [T]