Tag: rx swift

RxSwift如何将“全部清除”UIButton添加到简单的电子表格示例

下面是一个简单的电子表格RxSwift回购代码(添加三个数字): Observable.combineLatest(number1.rx_text, number2.rx_text, number3.rx_text) { textValue1, textValue2, textValue3 -> Int in return (Int(textValue1) ?? 0) + (Int(textValue2) ?? 0) + (Int(textValue3) ?? 0) } .map { $0.description } .bindTo(result.rx_text) .addDisposableTo(disposeBag) 我想添加一个“全部清除”UIButton,这将导致三个框被重置为零,总数也被设置为零。 势在必行,很容易。 在RxSwift中添加这个button的正确方法是什么?

RxSwift:双向绑定

我使用了官方的双向绑定解决scheme func <-> <T>(property: ControlProperty<T>, variable: Variable<T>) -> Disposable{ let bindToUIDisposable = variable.asObservable() .bindTo(property) let bindToVariable = property .subscribe(onNext: { n in variable.value = n }, onCompleted: { bindToUIDisposable.dispose() }) return Disposables.create(bindToUIDisposable, bindToVariable) } 用法: (textField.rx.text <-> object.property).addDisposableTo(disposeBag) 属性定义: var property = Variable<String?>(nil) 在onNext方法中,所有ok和variable改变了它的值,但是我的object.property没有改变。 有没有办法将可变的当前值设置为< – >方法内的ControlProperty,bcs我需要设置初始值,在订阅开始之前?

正确使用RxSwift来链接请求,flatMap或其他东西?

冷杉的整个我是rxswift新来的,所以我想答案是显而易见的,但目前我无法自己find解决scheme。 我有两个function: func downloadAllTasks() -> Observable<[Task]> func getTaskDetails(taskId: Int64) -> Observable<TaskDetails> 第一个是使用networking请求下载任务对象列表,第二个下载任务详细信息的特定任务(使用它的ID) 我想要实现的是下载所有任务,然后为每个任务我想下载它的细节,并订阅所有任务细节准备就绪的事件。 所以我想我应该订阅Observable <[TaskDetails]>,但我不知道该怎么做。 downloadAllTasks() .flatMap{ … // flatMap? something else? } .subscribe( onNext: { details in print("tasks details: \(details.map{$0.name})") }) .addDisposableTo(disposeBag) //编辑 感谢Silvan Mosberger的回答,我更接近解决scheme。 还有一个问题。 现在我有这样的东西: downloadAllTasks() .flatMap{ Observable.from($0) } .map{ $0.id } .flatMap{ [unowned self] id in self.getTaskDetails(taskId: id).catchError{ error in print("$$$ […]

如何实现一个具有通用约束types属性的Swift协议?

我想有一个看起来像这样的协议: protocol ReturnType { var returnType: ImmutableMappable.Type { get } } 执行协议的枚举部分: extension ShimEndPoint: ReturnType { var returnType: ImmutableMappable.Type { switch self { case .deAuthorize(_, _): return EmptyResponse.self case .authorize(_, _): return AuthorizeResponse.self case .step(_, _, _, _): return StepResponse.self } } } EmptyResponse,AuthorizeResponse和StepResponse都实现ImmutableMappable。 现在我想在函数调用中使用“returnType”属性: return Shim.provider .request(endPoint) .timeout(7, scheduler: MainScheduler.asyncInstance) .retry(3) .mapObject(endPoint.returnType) line mapObject给了我下面的编译器错误:“不能将types'ImmutableMappable.Type'的值转换为期望的参数types'T.Type' […]

RxSwift – 去抖/调节“反”

比方说,我有一个即时通讯应用程序,每次消息到达时都会发出嘟嘟声。 我想消除嘟嘟声,但我想播放第一条消息的哔声,而不是以下(比如2秒)。 另一个例子可能是:我的应用程序发送键入通知(所以我聊天的用户可以看到,我正在input一条消息)。 我想在开始input时发送打字通知,但只以X秒的间隔发送新的打字通知,所以我不会为每个input的字符发送打字通知。 这有道理吗? 有没有一个运营商? 现有的运营商可以实现吗? 这是我第一个例子的代码。 我现在debounce解决这个问题,但这并不理想。 如果我以1秒的间隔收到1000条消息,它将不会播放声音,直到最后一条消息到达(我想在第一条消息上播放声音)。 self.messagesHandler.messages .asObservable() .skip(1) .debounce(2, scheduler: MainScheduler.instance) .subscribeNext { [weak self] message in self?.playMessageArrivedSound() }.addDisposableTo(self.disposeBag) 谢谢!

使用重试时根据http错误代码更新令牌

我发现这个例子如何刷新oauth令牌使用moya和rxswift ,我不得不稍微改变,以编译。 此代码为我的scheme工作80%。 它的问题是,它会运行所有的HTTP错误,而不仅仅是401错误。 我想要的是把所有其他的http错误作为错误传递,以便我可以在别处处理它们,而不是在这里吞下它们。 有了这个代码,如果我得到一个HttpStatus 500 ,它将运行validation码3次,这显然不是我想要的。 我试图改变这个代码来处理只处理401错误,但似乎不pipe我做了什么,我不能得到的代码编译。 它总是抱怨错误的返回types, "Cannot convert return expression of type Observable<Response> to return type Observable<Response>"这对我来说没有任何意义.. 我想要的:处理401,但停止所有其他错误 import RxSwift import KeychainAccess import Moya public extension ObservableType where E == Response { /// Tries to refresh auth token on 401 errors and retry the request. /// If the refresh fails, the […]

networking调用后绑定到UIRefreshControl

我是新来RxSwift,我想知道如何能够“反应”使用UITefView与UITableView而不是创build目标的正常方式,并手动调用beginRefreshing()和endRefreshing() 。 例如,说我从API加载一些string: class TableViewController: UITableViewController { var data : [String] = [] let db = DisposeBag() override func viewDidLoad() { super.viewDidLoad() refreshControl = UIRefreshControl() //I don't want to use //refreshControl?.addTarget(self, action: #selector(getData), forControlEvents: .ValueChanged) //Do something to refreshControl.rx_refreshing? } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: […]