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()
}
}
上面的代码在从 View
到 Controller
注入 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
.
最后,我知道我可以使用委派。但在我看来它有它自己的问题。自从我开始努力命名协议以来,我已经在尝试减少项目中的 Delegate
s。
提前致谢。
swift不允许在函数声明中命名参数,所以你可以这样做:
class TestView: UIView {
// var action: () -> () = {}
var action: (_ name: String , _ surname: String ) -> () = { _, _ in }
@objc func buttonAction(_ sender: UIButton) {
action("name", "surname")
}
}
我正在尝试找到一种方法来为我的案例命名函数类型参数。为了更清楚,让我分享一些代码。
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()
}
}
上面的代码在从 View
到 Controller
注入 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
.
最后,我知道我可以使用委派。但在我看来它有它自己的问题。自从我开始努力命名协议以来,我已经在尝试减少项目中的 Delegate
s。
提前致谢。
swift不允许在函数声明中命名参数,所以你可以这样做:
class TestView: UIView {
// var action: () -> () = {}
var action: (_ name: String , _ surname: String ) -> () = { _, _ in }
@objc func buttonAction(_ sender: UIButton) {
action("name", "surname")
}
}