我正在构建网络模块,该模块使用Body
将被编码为 url 请求正文的类。我想Body
使用符合 Encodable 协议的任何类进行初始化,在我的情况下,它是MyDevice
符合的类DeviceEncodable
,它是定义我的 url 请求所需的一切的协议。MyDevice
该类已经从另一个名为 的类继承,SpecialClass
因此我只能使其符合协议,因为 swift 不允许从多个类继承。问题是当我初始化Body
时DeviceEncodable
我得到错误“类型'Body'不符合协议'Encodable'”我明白这是因为DeviceEncodable
可以是类但也可以是其他一些符合它的协议。DeviceEncodable
作为财产使用的正确解决方案是什么Body
函数,因此它将被正确编码而无需继承?这是Samble代码:
class Body: Encodable {
let device: DeviceEncodable
init(_ deviceInfo: DeviceEncodable) {
self.device = deviceInfo
}
}
protocol DeviceEncodable: AnyObject, Encodable {
var someSpecialProperty: String {get}
}
class MyDevice: SpecialClass, DeviceEncodable {
var someSpecialProperty: String = "special"
}
class SpecialClass {
var someOtherProperty: String = "other"
}