티스토리 뷰

SwiftUI

SwiftUI ) onReceive(_:perform:)

Zedd0202 2020. 10. 23. 17:31
반응형

 

안녕하세요 :) Zedd입니다.

오늘은 onReceive(_:perform:)에 대해서 공부해보겠습니다!

 

onReceive(_:perform:)


정의 : view에서 지정된 publisher가 emit한 데이터를 감지할 때 수행할 작업을 추가.

정의는 이렇게 생겼는데, 

publisher는 말 그대로 그냥 구독할 publisher고

action은 publisher가 이벤트를 생성할 때 수행할 작업이에요.

그럼 써봅시다!

 

그냥 onReceive의 publisher자리에는 Publisher만 들어가면 어떻게는 쓸 수 있습니다. 

그냥 가장 쉬운 예제를 들고왔어요. 

내가 어떤 publisher의 이벤트에 따라 뭔가를 해주고싶다면, 

위처럼 publisher를 만들고 onReceive에 넣어주면 됩니다.

사실 위 코드는 

Button(self.text) {
   self.text = "\(Array(1...10).randomElement()!)"
}

그냥 이런식으로 해도 되지만;;; 

onReceive(_:perform:)를 보여주기 위한 예제로만 봐주세요.

hackingwithswift에 있는 이 예제도 

struct ContentView: View {
    @State var currentDate = Date()
    let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()

    var body: some View {
        Text("\(currentDate)")
            .onReceive(timer) { input in
                self.currentDate = input
            }
    }
}

좋은 것 같아요.

반응형