我希望我的subject
到observe
在myArray
上更改,因此每次向myArray
附加一个新元素时,subscription
都会触发。
var subject = PublishSubject<[String]>()
var myArray = ["One", "Two"]
subject.flatMap{Observable.from($0)}.subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
subject.onNext(myArray)
myArray.append("Three")
subject.onNext(myArray)
它每次更改时都会在myArray
上添加onNext
,但是当subscription
获得新的myArray
而不使用element
时,是否有一种方法可以自动触发onNext
?也许通过将myArray
变成observable
?
这是利用属性包装器的好时机。请注意,不要在struct
中使用它。
@propertyWrapper
class RxPublished<Element> {
private let subject: BehaviorSubject<Element>
init(wrapped: Element) {
subject = BehaviorSubject(value: wrapped)
}
deinit {
subject.onCompleted()
}
var wrappedValue: Element {
get { try! subject.value() }
set { subject.onNext(newValue) }
}
var projectedValue: Observable<Element> {
subject.asObservable()
}
}
class MyClass {
@RxPublished(wrapped: ["One", "Two"]) var myArray: [String]
}
func example() {
let foo = MyClass()
_ = foo.$myArray
.debug("foo.myArray")
.subscribe()
foo.myArray.append("Three")
}