我有一个下面的结构,它正在确认一个如下的协议
struct ResourceItems<T: Decodable>: MyProtocol {
}
protocol MyProtocol: Decodable {
}
现在我要创建另一个协议,并希望按如下所示访问该协议中的“ ResourceItems”
protocol ObjectConverterProtocol{
var response : ResourceItems {get set}
}
但是得到的错误是“
对通用类型'ResourceItems'的引用需要<…>
中的参数
’
请指导我我必须作为通用参数传递的内容。我尝试使用AnyObject和Any,但它们都不能确认Codable。
我无法解决此问题。请指导。
答案 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