combine 익히기(2)

이재영·2023년 1월 23일
0

Notification Publishing

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)

Just Publisher 사용해보기

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)")



thread 변경해보기

만약 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

profile
기록

0개의 댓글