问题标签 [rx-swift]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - delaySubscription 不适用于 rx_tap
这是我的代码的简短版本,它将重现该问题:
我希望“延迟”信号在我点击按钮后 2 秒触发,但没有这样的运气。实际发生的情况:我第一次点击按钮时,“源”会触发,但没有其他任何反应。然后当我再次点击时,“源”和“延迟”同时开火。我认为这是一些线程问题,所以我尝试observeOn(MainScheduler.sharedInstance)
在任何地方添加,但没有帮助。有任何想法吗?
更新:通过添加.debug()
到流中,我发现延迟的流实际上在 2 秒后订阅了源。但这仍然不能解释为什么它也不会在 2 秒后触发通知。
swift - 在可观察对象中处理一次性物品的正确方法
我有一个HTTPService
返回一个Observable<NSData>
. 我的目标是将该服务组合成另一个服务,ServiceA
为我的用例转换数据。Observable.create
在 RxSwift 2.0.0-rc.0 中使用ServiceA
它很简单。我的问题是如何正确处理订阅返回的一次性用品HTTPService
。
如果我什么都不做,我会收到编译时警告:http result of call is unused
: //git.io/rxs.ud。我从阅读中了解到,如果我什么都不做可能没问题:(xs
下面提到的是let xs: Observable<E> ....
如果 xs 以可预测的方式终止并显示 Completed 或 Error 消息,则不处理订阅 Disposable 不会泄漏任何资源,但它仍然是首选方式,因为这样元素计算会在可预测的时刻终止。
因此,这就是我目前正在解决的问题,以及我想知道我是否正确执行此操作或是否误解了某些内容的地方。
system.reactive - 有没有办法在定义后以声明方式将更新推送到可观察对象?
我正在探索 Rx,我想看看在初始化该元素的组件之前,是否可以声明性地定义某个 UI 元素的输入和输出。
这就是它的样子:
这里的问题是我正在使用 PublishSubject 将更新推送到输入流,这是必要的并且建议不要这样做。Rx 是否提供了一种以某种方式将序列添加到已经运行的 observable 的方法?
mvvm - 使用 RxSwift 测试 ViewModel
我ModelView-ViewModel
在我目前正在工作和使用的项目中使用RxSwift
, RxBlocking
& RxTests
。目前我正在尝试测试 ViewModel,但在解决这个问题时遇到了很多麻烦。
所以可以说我有一个ExampleViewModel
适合我的ExampleViewController
. 我ExampleViewModel
期待一个流,它是来自 的两个流Observable
的组合 ( ) ,一个是 textField 要么是焦点,另一个是文本流;所以像。根据是否聚焦和字符串的上下文,my将向其内部公开的属性发出一个事件,该属性是backgroundColor的状态;.combineLatest
UITextField
Observable<(Bool, String)>
ExampleViewModel
Observable
UITextField
Observable<UIColor>
ExampleViewModel.swift
:
(对不起,我不知道如何正确格式化)
基本上我想测试这个类并通过控制焦点和文本输入来ExampleViewModel
测试它是否发出正确的信号。UIColor
谢谢
swift - 以下来自 RxSwift/RxCocoa 的示例代码有什么作用?
我试图详细了解
来自 WikipediaSearchViewController.swift 第 47-64 行。我试图提取参数来查看具体的类型签名,但重写为
给
无法使用类型为“(String,cellType:UITableViewCell.Type)”的参数列表调用“rx_itemsWithCellIdentifier”
对于 driveArg1 和
在没有更多上下文的情况下,表达式的类型是模棱两可的
对于驱动器Arg2。
drive
和的签名rx_itemsWithCellIdentifier
是
但在这一点上 Swift 语法对我来说是不可理解的。谁能解释签名以及代码中发生了什么?
swift - RxSwift 正确使用变量
我正在尝试将项目转换为使用 RxSwift 和 MVVM。我有一项服务,可以在每次应用启动时同步 Parse 的数据列表,我基本上想确保我采用了正确的方法。
我所做的是制作一个可变主题,然后让我的模型听这个。解析服务:
MushroomLibraryModel:
我也这样做来表达同步状态。
解析服务:
然后我更新变量 a la
同步视图模型:
无论如何,如果有人能告诉我这是否是一种好方法,或者我是否在滥用 RxSwift(并指导我应该如何做),我将不胜感激。
干杯!
swift - flatMap() 在单个事件中调用两次
我有一个ViewController
在其中init()
使用PublishSubject
. ViewModel
然后我将流传递给我stream.asObservable()
在viewDidLoad()
. 创建后,我将我的事件推送到流中,然后期望 ViewModel 通过触发异步请求(也已用 Rx 包装)来对事件做出反应。ViewModel
ViewModel
ViewModel
ViewController
视图控制器:
视图模型:
我的问题是,doSomethingAsyncThatReturnsAnObservable()
当流中只有一个事件时,它被调用了两次。var count = 1; stream.subscribeNext { _ in print(count++) }
我已经通过使用which prints检查了这一事实1
。
Any idea as to why subscribeNext()
fires once on each event but flatMap()
fires twice?
ios - 使用 RxSwift 创建“反应式”API
我正在尝试 RxSwift,并想为我的一个常规 API 调用创建一个“流 API”。
我的想法是进行常规调用(它已经使用了 observables 而没有任何问题)并有一个计时器触发此类调用并将结果发送到同一个 observable 上,因此视图控制器可以自动更新,所以不要这样做(伪代码如下) :
我希望发生这种情况(伪代码如下):
我尝试的最后一件事是将 NSTimer 添加到混合中,但我不知道如何获取对接收器的引用并将其传递给计时器调用的方法以实际将事件发送到管道中,因为计时器的处理程序必须在独立方法上。我尝试从 BlocksKit 中加入块计时器扩展,但计时器每秒触发一次,而不是按指定的时间间隔触发,这违背了目的。
我也读过关于Interval
运营商的信息,但我不确定这是正确的方法。
关于如何做到这一点的任何指示?
最终目标是仅在前一个调用完成(成功或失败)后才重新触发计时器。
swift - RXSwift 闭包中的“[weak self]”
我需要[weak self]
在 RXSwift subscribeNext 闭包中使用吗?
我有代码:
我是否需要修改它以便[weak self]
在关闭开始时有一个捕获列表?像这样: