是否可以实现协议或协议扩展,该协议扩展指定协议仅用于类&那些班级有超级班吗?
如果是这样的话,我可以利用这个函数来迭代一个类的超类来收集他们每个存储一个公共变量的所有数据吗?
换句话说,在下面的示例中,是否可以创建一个扩展来执行第二个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)
答案 0 :(得分:1)
你无法做到这一点。
通过在其上面实现NSObjectProtocol,您只能实现在协议内部使用超类的功能。但是,将出现从Objective C到Swift的桥接函数的问题。该解决方案将使协议成为@objc协议,但是您将无法使用默认实现扩展它。