我想知道控制协议是否符合基类是否是一个好习惯。在我看来,这不是一个好习惯,因为基类应包括与子类相关的所有属性和方法。并且基类不应该知道子类是否符合协议。
用法示例;
class BaseClass: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let self = self as? SomethingAble {
self.doIt()
}
}
}
protocol SomethingAble {
func doit()
}
谢谢
答案 0 :(得分:3)
我认为,您可以使用自定义delegate
变量
class myViewController: UIViewController {
var customDelegate : UIViewController?
.
.
.
override func viewDidLoad() {
super.viewDidLoad()
if delegate is MainVC {
//do what you want.
} else {
// git la burdan ;)
}
}
.
.
}
答案 1 :(得分:2)
您可以通过多种方式来实现可选协议,因此其中一种:
第一:
Swift具有称为39
的功能,该功能使我们能够为那些我们希望是可选的方法提供默认实现。
extension
第二:
protocol SomethingAble {
func optionalMethod()
func notOptionalMethod()
}
extension SomethingAble {
func optionalMethod() {
//this is a empty implementation to allow this method to be optional
}
}