Swift - 命名函数类型参数

Swift - Naming Function Type Parameters

我正在尝试找到一种方法来为我的案例命名函数类型参数。为了更清楚,让我分享一些代码。

class ViewController: UIViewController {
    
    private lazy var testView: TestView = {
        let view = TestView()
        view.action = action
        return view
    }()
    
    func action() {
        //stuff
    }
    
}

class TestView: UIView {
    
    var action: () -> () = {}
    
    @objc func buttonAction(_ sender: UIButton) {
        action()
    }
}

上面的代码在从 ViewController 注入 UIButton 动作时运行良好,但当有参数要传递时,情况会变得更糟。当我尝试将 TestView 中的 action 更改为

var action: (name: String, surname: String) -> () = { _, _ in }

它不允许我命名 String 参数。之后我尝试将其更改为使用元组,

var action: ((name: String, surname: String)) -> () = { _ in }

TestView 中的代码有效。但是我无法匹配 ViewController 中的类型 view.action = action

我尝试这样做有两个原因。其中之一是在 View 内部没有任何逻辑,另一个是当有 2 个以上的参数要发送时,可以通过其给定名称轻松识别并避免混淆 ViewController 内部的参数到 Controller.

最后,我知道我可以使用委派。但在我看来它有它自己的问题。自从我开始努力命名协议以来,我已经在尝试减少项目中的 Delegates。

提前致谢。

swift不允许在函数声明中命名参数,所以你可以这样做:

class TestView: UIView {
    
//    var action: () -> () = {}
    var action: (_ name: String , _ surname: String ) -> () = { _, _ in }
    
    @objc func buttonAction(_ sender: UIButton) {
        action("name", "surname")
    }
}