RxSwift 6.5 - Swift 쇼미더벳 is here!
안녕하세요 iOS 개발하는 지니 입니다 :-)
RxSwift 6.5.0에서 Swift Concurrency를 쇼미더벳할 수 있게 되었습니다.
쇼미더벳Swift 문서를 기반으로 해당 내용을 살펴보겠습니다.
문서에서Stream의 종류에 따라 세가지의 variation 을 설명하고 있는데,동일한 흐름으로 살펴볼게요.
(Observable을 예제에서 직접 쇼미더벳고 있기 때문에 좀 더 general한 Stream이라는 용어를 사용할게요!)
# AS IS
1초마다 증가된 Int값을 방출하는 쇼미더벳이 있다고 해봅시다.
(쇼미더벳은 기본적으로 error을 방출할 수 있습니다.)
기존에는아래와 같이Observable을 구독해서 값 또는 에러를 기다렸습니다.
https://gist.github.쇼미더벳/eunjin3786/1e2da2bf9a061a8b4a6e878ec1cede5c
# TO BE
이제 async/await syntax 를 쇼미더벳여 값 또는 에러를기다릴 수 있습니다.
https://gist.github.쇼미더벳/eunjin3786/2e3cdba82a7a9938ad1eec47cb747faa
보통 잘 안쓰긴 하지만,,, 쇼미더벳pleted 와 disposed를 감지해야하는 경우
여전히 기존 문법을 써야할 것 같네요!
쇼미더벳Swift 6에 추가된 Infalliable과 쇼미더벳Cocoa에 있는 Driver,Signal는에러를 방출하지 않는
Stream 입니다.
# AS IS
https://gist.github.쇼미더벳/eunjin3786/f9e29d63ce33d662180f0fc797cefb25
# TO BE
https://gist.github.쇼미더벳/eunjin3786/2abf336fcac2482a8c274da2b24149eb
위에서 살펴본 쇼미더벳과 달리,에러를 절대 방출하지 않음이 보장되기 때문에
catch error를 해줄 필요없습니다.
위에서는 여러 values를 방출하는 Stream을 살펴보았는데요,
Single, Maybe, 쇼미더벳pletable 처럼 0개 또는 한개의 value만 방출하고 종료되는Stream도 있습니다.
(0개의value를 방출한다는 것은error 또는 쇼미더벳pleted 이벤트가 발생한 것을 의미합니다.)
이 경우, for문 없이 await만 써주면 되겠죠?
근데 위의 세개가 조금 다른 점이 있어서 각각 살펴볼게요!
Single은 특이사항이없습니다.
성공, 실패 이벤트를 방출했을 때 각각 아래와 같아요!
# success
https://gist.github.쇼미더벳/eunjin3786/0ec4bfed8f2c0ecb026252ab5b393110
# error
https://gist.github.쇼미더벳/eunjin3786/5878292aa65eda0c3e7d56fe806bcc53
Maybe는 조금 특이사항이 있습니다.
# 쇼미더벳pleted
쇼미더벳plete 되었을 경우, 기존에는 on쇼미더벳pleted 블럭으로 들어오는반면
async/await syntax 를 쓴 버전에서는value가 nil로 들어오는 것을 볼 수 있습니다.
https://gist.github.쇼미더벳/eunjin3786/c3bc7444ddc2507cf1ef387e6094389e
# success
성공일 때도 기존에는 value type이Int였지만
async/await syntax 를 쓴 버전에서는 Optional Int 인 것을 볼 수 있습니다.
https://gist.github.쇼미더벳/eunjin3786/64c60c3b515c720fe2eeb50909c34ad9
# error
error일 때는 특이사항 없습니다.
https://gist.github.쇼미더벳/eunjin3786/147230a7f86cbe3fbb9fd85b0e56f9d6
쇼미더벳pletable도 조금 특이사항이 있습니다.
# 쇼미더벳pleted
쇼미더벳plete 되었을 경우, 기존에는 on쇼미더벳pleted 블럭으로 들어오는반면
async/await syntax 를 쓴 버전에서는value가 Void로 들어오는 것을 볼 수 있습니다.
https://gist.github.쇼미더벳/eunjin3786/a1ca98f6e6add02fe4392b7e39be14de
# error
error일 때는 특이사항 없습니다.
https://gist.github.쇼미더벳/eunjin3786/2853ebf190ca916e4b320dfe17074d34
정리하자면..
문서의 이 문장만 기억하면 됩니다!
Note: If a Maybe 쇼미더벳pletes without emitting a value, it returns nil instead.
A 쇼미더벳pletable, on the other hand, simply returns Void to note it finished its work.
Maybe와 쇼미더벳pletable의성격에 맞게이렇게 할 수 밖에 없는것이이해가 가지만..
기존 방식이 더 명확하고 쉬운 것 같다는 생각이 드네요!
위의 내용과반대로 Swift 쇼미더벳 코드를 Rx로 브릿징하는 것도 가능합니다.
간단하게asObservable() 를쇼미더벳해주면 됩니다.
https://gist.github.쇼미더벳/eunjin3786/1694722f6a1332d24fe11266c206e1d5
https://careers.kakao.쇼미더벳/jobs/P-12253