SwiftUI : Button 과 관련된 삽질

버들비·2020년 9월 6일
0

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 를 반환하기 위해 한번 실행된다. 즉, 버튼을 누르기도 전에 함수가 한번 실행되고 만다.

삽질하다가 발견한 트릭인데, 유용하게 쓰일지는 모르겠다.

0개의 댓글