繁体   English   中英

Swift:将参数添加到协议功能

[英]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")
    }
}

当我尝试向MyClassDelegatefoo方法添加参数时, "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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM