【发布时间】:2022-01-11 20:49:40
【问题描述】:
我正在构建使用 Body 类的网络模块,该类将被编码为 url 请求的主体。我想用任何符合 Encodable 协议的类来初始化 Body,在我的情况下,它是符合 DeviceEncodable 的 MyDevice 类,这是定义我的 url 请求所需的一切的协议。 MyDevice 类已经继承自另一个名为 SpecialClass 的类,因此我只能将其符合协议,因为 swift 不允许从多个类继承。问题是,当我用DeviceEncodable 初始化Body 时,我得到错误“类型'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"
}
【问题讨论】: