gpt4 book ai didi

swift - Observable 的 RxSwift 用途

转载 作者:行者123 更新时间:2023-12-04 01:11:26 28 4
gpt4 key购买 nike

我正在学习 RxSwift 并试图了解 Observable 和 PublishSubject aka Sequence 之间的主要区别。
据我了解,Sequences/PublishesSubject 充当 Observable 和 Observer。您可以订阅这些,如果值发生变化,它们会发出通知。 PublishesSubject 可以更改。
我的问题是,那么 Observables 的目的是什么?我只能用 just() 的固定值创建 Observable或 from() .但是我不能更改这些值或附加一个项目,对吧?所以我的 Observable 只会发出我在 init 中分配给它的值。当实际值是不可变的时,为什么我需要 Observable 呢?
让我们考虑一个返回 Observable<UIImage> 的函数。 .我可以只返回一个 UIImage,而不是返回那个 Observable 然后订阅下一个。为什么我需要一个 Observable?
如果我创建以下 Observable:

let observable = Observable.of(1,2,3)
我会有一个静态大理石图..我的 Observable 将发出 1,2 和 3。然后..?结束了吗?
我只是不明白为什么我应该使用 Observable。任何帮助表示赞赏。

最佳答案

为了帮助您理解,请查看 Observable.create .你会看到它需要一个闭包。每次观察者订阅它时,都会执行此闭包。
所以如果你想实现 just使用 create ,你会做这样的事情:

func just(_ value: Int) -> Observable { 
return Observable.create { observer in
observer.onNext(value)
observer.onCompleted()
return Disposables.create()
}
}
当然,这只会在一段时间内发出静态值,但你可以做其他事情......
let random = Observable<Int>.create { observer in
observer.onNext(Int.random(in: 0..<10))
observer.onCompleted()
return Disposables.create()
}
以上将发出一个随机值然后完成。您也可以在闭包中发出网络请求,或者您可以调用 onNext每次点击一个按钮。 RxCocoa 已经有很多了……例如:
let result = loginButton.rx.tap
.withLatestFrom(Observable.combineLatest(usernameTextField.rx.text, passwordTextField.rx.text))
.map { URLRequest.login(credentials: $0) }
.flatMapLatest { URLSession.shared.rx.data(request: $0) }
.subscribe(onNext: { print("data:", $0) }
  • loginButton.rx.tap每次点击按钮时都会发出下一个事件。
  • usernameTextField.rx.text & passwordTextField.rx.text每次用户在其中一个文本字段中输入数据时发出下一个事件。
  • URLSession.shared.rx.data(request:)当服务器响应数据时发出一个值。所有这些都是 Observables 的(形式)。
  • 关于swift - Observable 的 RxSwift 用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64733638/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com