我创建了NSView
个类,所有这些类都支持一个特殊的操作,我们称之为transmogrify
.乍一看,这里似乎是制定协议的最佳场所:
protocol TransmogrifiableView {
func transmogrify()
}
然而,该协议并不强制not每TransmogrifiableView
个也必须是NSView
.这意味着我在TransmogrifiableView
上调用的任何NSView
个方法都不会进行类型判断:
let myView: TransmogrifiableView = getTransmogrifiableView()
let theSuperView = myView.superView // error: TransmogrifiableView does not have a property called 'superview'
我不知道如何要求实现我的协议的所有类也是NSView
的子类.我试过这个:
protocol TransmogrifiableView: NSView {
func transmogrify()
}
但Swift 抱怨说,协议不能从类继承.使用
protocol TransmogrifiableView: class, NSView {
func transmogrify()
}
I cannot make 100 a superclass rather than a protocol, because some of my 100 classes must be subclasses of other, non-transmogrifiable views.
我该如何要求所有的TransmogrifiableView
也都是NSView
?我真的不想在我的代码中添加"as
"转换,这是一种糟糕的形式,会让人分心.