我可以将协议类型传递给泛型类

时间:2021-07-21 03:08:03

标签: swift swift-protocols

我有一个协议 A 并且有多个符合协议 A 的结构体。我需要在一个集合中存储不同的结构体对象。但是我的集合类型是由另一个服务预定义的,该服务类型为 - class Storage。我无法将值类型作为 A 传递,它会抛出一个错误,指出协议 A 不符合可解码类型。我只想知道这是否是传递自定义协议的正确方法,我可以使自定义协议符合 Codable 协议。示例代码片段。

任何想法都会有所帮助

class Storage<Value: Codable>{}

protocol A {}

struct Type1: A, Codable, Equatable, Comparable {}
struct Type2: A, Codable, Equatable, Comparable {}

let storage = Storage<A>() // Throws error - Type 'A' does not conform to protocol 'Decodable'

1 个答案:

答案 0 :(得分:1)

使用基础类

class Storage<Value: Codable>{}

protocol A {}

class Type: A, Codable {}
class Type1: Type, Equatable, Comparable {}
class Type2: Type, Equatable, Comparable {}

let storage = Storage<Type>()