Combine 실습 8

Woozoo·2022년 12월 20일
// Basic CombineLatest

let strPublisher = PassthroughSubject<String, Never>()
let numPublisher = PassthroughSubject<Int, Never>()

/* Publishers.combineLatest(strPublisher, numPublisher).sink(receiveValue: { (str, num) in
	print("Receive: \(str), \(num)")
}*/ //(지금 보면 위에꺼는 두개 한꺼번에 묶어줬고, 밑에꺼는 strPublisher에 붙여줬는데 결국 똑같은거임!)

strPublisher.combineLatest(numPublisher).sink { (str, num) in
	print("Receive: \(str), \(num)")
}

strPublisher.send("a")
strPublisher.send("b")
strPublisher.send("c")

numPublisher.send(1)
numPublisher.send(2)
numPublisher.send(3)

// Advanced CombineLatest

let usernamePublisher = PassthroughSubject<String, Never>()
let passwordPublisher = PassthroughSubject<String, Never>()

let validatedCredentialsSubscription = usernamePublisher.combineLatest( passwordPublisher)
	.map { (username, password) -> Bool in
    	return !username.isEmpty && !password.isEmpty && password.count > 12
        }
    .sink { valid in
    	print("Credential valid? : \(valid)")
    }

usernamePublisher.send("jasonLee")
passwordPublisher.send("weakpw")
passwordPublisher.send("verystrongpassword")


// Merge

let publisher1 = [1, 2, 3, 4, 5].publisher
let publisher2 = [300, 400, 500].publisher

let mergePublisherSubscription = publisher1.merge(with: publisher2)
	.sink { value in
    	print("Merge: subscription received value: \(value)")
    }

예시처럼 Merge는 두 퍼블리셔 값 타입이 같아야 가능!

profile
우주형

0개의 댓글