我正在浏览Apple开发者页面的iOS教程.
在我看来protocol,interface几乎具有相同的功能.
这两者有什么不同吗?
项目中的差异用法?
更新
是的,我看过上面的链接,我仍然不知道什么区别之间使用protocol和interface.当我提出这样的问题时,我想看一个关于这个主题的简单解释.有时从文档中获取所有内容可能很困难.
我想用快速语言创建一个抽象函数.可能吗?
class BaseClass {
func abstractFunction() {
// How do I force this function to be overridden?
}
}
class SubClass : BaseClass {
override func abstractFunction() {
// Override
}
}
Run Code Online (Sandbox Code Playgroud) 我正在创建几个NSView类,所有类都支持特殊操作,我们将调用它们transmogrify.乍一看,这似乎是协议的完美之处:
protocol TransmogrifiableView {
func transmogrify()
}
Run Code Online (Sandbox Code Playgroud)
然而,该协议并没有执行,每一个TransmogrifiableView是一个NSView为好.这意味着NSView我在a上调用的任何方法TransmogrifiableView都不会键入check:
let myView: TransmogrifiableView = getTransmogrifiableView()
let theSuperView = myView.superView // error: TransmogrifiableView does not have a property called 'superview'
Run Code Online (Sandbox Code Playgroud)
我不知道如何要求实现我的协议的所有类也是子类NSView.我试过这个:
protocol TransmogrifiableView: NSView {
func transmogrify()
}
Run Code Online (Sandbox Code Playgroud)
但是Swift抱怨协议不能从类继承.将协议转换为仅使用类的协议没有帮助
protocol TransmogrifiableView: class, NSView {
func transmogrify()
}
Run Code Online (Sandbox Code Playgroud)
我不能创建TransmogrifiableView超类而不是协议,因为我的一些TransmogrifiableView类必须是其他非transmogrifiable视图的子类.
我应该如何要求所有TransmogrifiableView的也可以NSView的?我真的不想用as"转换"来改变我的代码,这种转换形式不好而且分散注意力.