NotificationCenter를 선언한 후 설정한 Notification의
이름에 따라 데이터를 Publishing 해주게 한다.'
코드
// Notifications
let center = NotificationCenter.default
let alarm = Notification.Name("MyNotification")
let alarmPublisher = center.publisher(for: alarm, object: nil)
let subscription1 = alarmPublisher.sink {_ in
print("Alarm Received")
}
center.post(name: alarm, object: nil)
nil 상태의 UILabel에 Just를 사용하여 text property에
Key Path를 사용하여 데이터를 할당시킬 수 있다.
Key Path에 대한 자세한 내용 :
https://developer.apple.com/documentation/swift/keypath
https://sarunw.com/posts/what-is-keypath-in-swift/
코드
// KeyPath binding
let testLabel = UILabel()
print("text: \(testLabel.text)")
Just(28)
.map { "Age is \($0)"}
.assign(to: \.text, on: testLabel)
print("text: \(testLabel.text)")
만약 operator 작업이 백그라운드 계산이 필요한 무거운 작업이라고 하면,
부담을 덜기 위해 메인 스레드에서 실행하는 것을 피해야 한다.
Scheduler 메소드를 사용하여 main thread가 아닌
새로만든 custom thread에서 실행될 수 있게 해주었고,
데이터를 받을땐 다시 main thread로 복귀하게 구현해줬다.
코드
let arr = [1, 2, 3].publisher
let q = DispatchQueue(label: "custom")
let subscription = arr
.subscribe(on: q)
// operator
.map { value in
print("trasform: \(value), thread: \(Thread.current)")
return value
}
.receive(on: DispatchQueue.main)
// subscriber
.sink { value in
print("받은 데이터: \(value), thread: \(Thread.current)")
}
관련 문서 및 사이트 https://trycombine.com/posts/subscribe-on-receive-on/
https://ios-development.tistory.com/1121