所以我有一个viewController,它包含一个自定义视图,
并且viewController类符合ViewProtocol
我期望在someAction
someCustomizedView
方法
它会打印" method in otherCustomizedClass called "
但它会打印(" method in extension Called")
。
theNotOptionalMethod
工作正常但不是可选方法。
我有什么误解协议扩展吗?
请帮帮忙,挣扎了好几个小时,谢谢
protocol ViewDelegate: class {
func theNOTOptionalMethod()
}
extension ViewDelegate {
func theOptionalMethod(){
print (" method in extension Called")
}
}
class someCustomizedView: UIView {
weak var deleage: ViewDelegate?
@IBAction func someAction(sender: UIButton) {
deleage?.theOptionalMethod()
}
}
class someCustomizedVC: UIViewController, ViewDelegate {
lazy var someView: someCustomizedView = {
var v = someCustomizedView()
v.deleage = self
return v
}()
//...... someView added to controller
func theNOTOptionalMethod() {
// do nothing
}
func theOptionalMethod() {
print (" method in otherCustomizedClass called ")
}
}
答案 0 :(得分:1)
这就是扩展方法的工作原理。它们将实现隐藏在类中。
要使用可选方法创建协议,您需要将可选方法放在协议定义中:
protocol ViewDelegate: class {
func theNOTOptionalMethod()
func theOptionalMethod()
}
或者,您可以使用@objc
和optional
修饰符:
@objc protocol MyDelegate : class{
func notOptionalMethod()
@objc optional func optionalMethod()
}
当您致电optionalMethod
时,您需要打开可选项:
delegate.optionalMethod?()