[英]Swift: Adding parameter to protocol function
考虑以下代码,当按下按钮时,该代码将显示"working"
:
protocol MyClassDelegate: class {
func foo()
}
class MyClass {
weak var delegate: MyClassDelegate?
func foo() {
delegate?.foo()
}
let button: UIButton = {
button.addTarget(self, action: #selector(foo), for: .touchUpInside)
return button
}()
}
class MyViewController { ... }
extension MyViewController: MyClassDelegate {
func foo() {
print("working")
}
}
当我尝试向MyClassDelegate
的foo
方法添加参数时, "working"
停止打印(意味着按钮停止工作了?)。 即:
protocol MyClassDelegate: class {
func foo(_ str: String)
}
class MyClass {
weak var delegate: MyClassDelegate?
func foo() {
delegate?.foo("working")
}
let button: UIButton = {
button.addTarget(self, action: #selector(foo), for: .touchUpInside)
return button
}()
}
class MyViewController { ... }
extension MyViewController: MyClassDelegate {
func foo(_ str: String) {
print(str)
}
}
如何获得带有参数的第二版代码才能工作? 谢谢。
您在委托上调用了错误的方法。 您的MyClassDelegate
没有名为showDetails()
方法。 以这种方式调用您的委托方法:
func foo() {
delegate?.foo("working")
}
问题在于button
需要使用lazy var
而不是let
来声明。
您是否这样做了:在ViewController中的cell.delegate = self
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.