【備忘録】Property WrapperとRxSwift
@propertyWrapper
struct BehaviorRelayWrapper<T> {
private let relay: BehaviorRelay<T>
private let observable: Observable<T>
init(value: T) {
relay = BehaviorRelay(value: value)
observable = relay.asObservable()
}
var wrappedValue: Observable<T> {
observable
}
var projectedValue: BehaviorRelay<T> {
relay
}
}
@propertyWrapper
struct PublishRelayWrapper<T> {
private let relay: PublishRelay<T>
private let observable: Observable<T>
init() {
relay = PublishRelay<T>()
observable = relay.asObservable()
}
var wrappedValue: Observable<T> {
observable
}
var projectedValue: PublishRelay<T> {
relay
}
}
@propertyWrapper
struct AnyObserverWrapper<T> {
private let relay = PublishRelay<T>()
private let observer: AnyObserver<T>
private let observable: Observable<T>
init() {
observer = .create(relay)
observable = relay.asObservable()
}
var wrappedValue: AnyObserver<T> {
observer
}
var projectedValue: Observable<T> {
observable
}
}
RxSwiftでのViewModelの記述をシンプルにすることができる。
参考にさせていただきました。
https://gist.github.com/sgr-ksmt/2cc92d8c7d517e08767fbe296b6da720
※AnyObserverはリンク先のextensionが必要になります
Author And Source
この問題について(【備忘録】Property WrapperとRxSwift), 我々は、より多くの情報をここで見つけました https://qiita.com/yokirin/items/a8df2bc9080ccf853724著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .