繁体   English   中英

Swift - 命名 Function 类型参数

[英]Swift - Naming Function Type Parameters

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

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()
    }
}

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

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

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

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

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

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

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

提前致谢。

swift 不允许在 function 声明中使用命名参数,因此您可以执行以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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