【发布时间】:2018-06-29 16:53:26
【问题描述】:
借助 Swift 协议、扩展和约束,我希望做两件事:
- 创建一个基本抽象类
-
子类和覆盖属性。
class PropertyBase { } class PropA : PropertyBase {} class PropB : PropertyBase {} class ControllerBase { var prop: PropertyBase? } class ControllerA : ControllerBase{ override var prop: PropA? } class ControllerB : ControllerBase{ override var prop: PropB? }
错误:
无法覆盖“PropertyBase”类型的可变属性“prop”?具有协变类型 'PropA?
很高兴知道我如何用不同的方法实现这一目标?
编辑
我想更清楚地说明我想要实现的目标。
在示例中,我正在构建一个处理未知对象类型的协议,我只知道该类型可能是 String 或 Int 或完全不同的类 Resource。我想通过添加扩展来支持这些不同的类型类。至少那是我认为正确的方法,但是
public protocol InstrumentProtocol : class {
associatedtype Item: AnyObject
var item: Item? { get set }
var identifier: String? { get }
}
public class AbstractBase : InstrumentProtocol {
public var item: AnyObject?
public var identifier: String?
public init(_ i : AnyObject) {
item = i
}
public func about() {
print(self.item) // Any Object
}
}
//// This is what I want to achieve, but it doesn't work
public extension InstrumentProtocol where Self.Item : Instrument {
public func about() {
print(self.item) //Should be of Instrument type
}
}
public extension InstrumentProtocol where Self.Item : String {
public func about() {
print(self.item) //Should be of String type
}
}
item 属性类型我不知道。在这种情况下,这将是最好的方法吗?
【问题讨论】:
标签: swift generics swift4 swift-protocols