引用通用类型'Resource'时需要<…>中的参数

时间:2019-10-30 12:32:11

标签: ios swift

我有一个下面的结构,它正在确认一个如下的协议

struct ResourceItems<T: Decodable>: MyProtocol {
} 



protocol MyProtocol: Decodable {

}

现在我要创建另一个协议,并希望按如下所示访问该协议中的“ ResourceItems”

protocol  ObjectConverterProtocol{
    var response : ResourceItems {get set}
}

但是得到的错误是“

  

对通用类型'ResourceItems'的引用需要<…>

中的参数

请指导我我必须作为通用参数传递的内容。我尝试使用AnyObject和Any,但它们都不能确认Codable。

我无法解决此问题。请指导。

2 个答案:

答案 0 :(得分:1)

由于ResourceItems是通用类型,因此您还需要在协议中使用它。为此,您可以使用关联的类型

protocol  ObjectConverterProtocol{
    associatedtype ResourceType: Decodable
    var response : ResourceItems<ResourceType> {get set}
}

然后您可以使用您的协议

struct Converter: ObjectConverterProtocol {
    typealias ResourceType = String

    var response: ResourceItems<ResourceType>
    //or var response: ResourceItems<String>
}

甚至使Converter通用

struct Converter<C: Decodable>: ObjectConverterProtocol {
    typealias ResourceType = C

    var response: ResourceItems<ResourceType>
}

let converter = Converter(response: ResourceItems<String>())

答案 1 :(得分:0)

由于ResourceItems 通用类型 ,因此您需要明确指定通用参数的类型。

现在,由于通用参数必须为Decodable,因此您必须在方括号{{1}中用Decodable定义ResourceItems类型}

假设结构<...>DecodableObject类型,即

Decodable

因此,您现在可以像这样定义类型为struct DecodableObject: Decodable { //.... } 的{​​{1}},

response