【发布时间】:2017-04-24 13:08:54
【问题描述】:
是否可以实现一个协议或协议扩展,指定该协议仅用于类并且这些类具有超类?
如果是这样,我可以利用它来创建一个向下迭代类的超类的函数,以收集它们各自存储一个公共变量的所有数据吗?
换句话说,在下面的示例中,是否可以创建一个扩展来执行第二个 BaseType 扩展伪代码尝试执行的操作,从而在结尾处 allVals = ["core", "middle", "top"] ?
import Foundation
protocol BaseType: class {
var data: [String] { get }
var all: [String] { get }
}
extension BaseType {
var all: [String] {
return data
}
}
// Is the intent of this extension realistic?
extension BaseType where Self.super is BaseType {
var all: [String] {
return data + super.all
}
}
class CoreDT: BaseType {
var core: String = "core"
var data: [String] { return [core] }
}
class MiddleDT: CoreDT {
var middle: String = "middle"
override var data: [String] { return [middle] }
}
class TopDT: MiddleDT {
var top: String = "top"
override var data: [String] { return [top] }
}
let allVals = TopDT().all
print(allVals)
【问题讨论】:
标签: swift protocols superclass