如何在RxSwift中初始化一个可观察的属性?

时间:2016-10-15 11:50:27

标签: ios swift rx-swift

我觉得这很令人费解。来自ReactiveCocoa,我希望这样的事情可能。

enter image description here

如何将RxSwift observable初始化为5?

5 个答案:

答案 0 :(得分:4)

您可以通过多种方式创建流:

主要方式

    Observable<Int>.create { observer -> Disposable in

        // Send events through observer
        observer.onNext(3)
        observer.onError(NSError(domain: "", code: 1, userInfo: nil))
        observer.onCompleted()

        return Disposables.create {
            // Clean up when stream is deallocated
        }
    }

快捷方式

    Observable<Int>.empty() // Completes straight away
    Observable<Int>.never() // Never gets any event into the stream, waits forever
    Observable<Int>.just(1) // Emit value "1" and completes

通过主题(在ReactiveSwift中又称为Property / MutableProperty

Variable在RxSwift 4中已弃用,但它只是BehaviourSubject的包装,因此您可以改用它。

有2个最常用的主题

BehaviorSubject-它将发出当前值和即将到来的值。因为它将发出当前值,所以需要使用值BehaviorSubject<Int>(value: 0)

进行初始化。

PublishSubject-它会发出即将到来的值。初始化PublishSubject<Int>()

时不需要初始值

然后您可以在主题实例上调用.asObservable()以获得可观察的结果。

答案 1 :(得分:1)

我现在无法测试,但Observable.just不能成为您正在寻找的功能吗?

Observable创建的来源:github link

当然,如果您打算修改它,也可以使用Variable(5)

答案 2 :(得分:1)

当我正在学习RxSwift时,我跑上了这个帖子。您可以初始化一个可观察的属性,如下所示:

var age = Variable<Int>(5)

并将其设置为可观察的:

let disposeBag = DisposeBag()

private func setupAgeObserver() {
    age.asObservable()
      .subscribe(onNext: {
        years in
        print ("age is \(years)")
        // do something
      })
      .addDisposableTo(disposeBag)
 }

答案 3 :(得分:1)

在RxSwift中Variable已弃用。使用BehaviorRelayBehaviorSubject

答案 4 :(得分:0)

一般来说,在Rx中,有一个BehaviorSubject存储最后一个值

特别是在RxSwift中,还有Variable,它是BehaviorSubject

的包装器

请参阅此处的说明 - https://github.com/ReactiveX/RxSwift/blob/master/Documentation/GettingStarted.md

相关问题