Button 의 정의에 따르면 action 에는 () -> Void 인 클로저나 함수만 들어올 수 있다.
Button 을 눌렀을때 실행되는 함수가 어떤 input parameter 를 가지길 원한다면, 다음과 같이 클로저 {} 안에 실행하고 싶은 함수를 호출하면 된다.
struct SomeView: View {
func someFunction(input: Any) {
// ...
}
var body: some View {
Button(action: {
self.someFunction(input: someInput)
}) {
Text("Some Button")
}
}
}
버튼을 누르기 전에 해당 함수가 실행되는 방법.
func someFunction(input: Any) -> () -> () {
// 함수 내부에서 실행되는 로직
return {}
}
...
Button(action: someFunction(input: someInput) {
...
}
() -> Void 인 함수를 반환하는 함수를 정의함으로써 action 에 집어넣을 수 있다.
그러나 이런 방법으로 하면, 함수가 () -> Void 를 반환하기 위해 한번 실행된다. 즉, 버튼을 누르기도 전에 함수가 한번 실행되고 만다.
삽질하다가 발견한 트릭인데, 유용하게 쓰일지는 모르겠다.