ios - Reactive Cocoa - 然后是自定义信号与 UI 信号

标签 ios swift cocoa-touch reactive-cocoa-4

我开始使用 Reactive Cocoa,所以我编写了一个小测试来看看我是否理解 then 构造。目标是仅在发送某些信号后才将文本从文本字段输出到标签。我尝试过 rac_signalForControlEvents(UIControlEvents.TouchUpInside) 和非常简单的自定义信号。前者甚至不调用 then 闭包,而后者确实按预期工作。这里有什么问题吗?

func someSetupFunction()
{
#if true
    // Why does this doesn't work?

    button.rac_signalForControlEvents(UIControlEvents.TouchUpInside).then
        {
            let strongSelf = weakSelf
            return strongSelf?.textField.rac_textSignal()
        }.subscribeNext
        { object in
            let strongSelf = weakSelf
            strongSelf?.label.text = object as! String! + " - 0"
        }
#else
    // ... but this does?

    customSignal().then
        {
            let strongSelf = weakSelf
            return strongSelf?.textField.rac_textSignal()
        }.subscribeNext
        { object in
            let strongSelf = weakSelf
            strongSelf?.label.text = object as! String! + " - 1"
        }
#endif
}

func customSignal() -> RACSignal
{
    return RACSignal.createSignal
        { subscriber in
            subscriber.sendNext(nil)
            subscriber.sendCompleted()
            return nil
        }
}

最佳答案

来自然后的文档:

Ignores all nexts from the receiver, waits for the receiver to complete, then subscribes to a new signal.

button.rac_signalForControlEvents 未完成(至少在点击按钮时未完成),这就是为什么没有任何反应。

iv-mexx的原始答案可以在 https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2671 找到

关于ios - Reactive Cocoa - 然后是自定义信号与 UI 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34881942/

相关文章:

swift - isRemovedOnCompletion 和 kCAFillModeForwards 有什么区别

swift - Swift4 中的 completionHandler 返回字符串

ios - 如何正确处理iOS应用程序内购买以及如何定义产品?

ios - 如何将 UIImage 的图像作为 NSString 获取?

ios - NSDateFormatter 问题

iphone - 覆盖 layoutSubviews 调用 [super layoutSubviews] 然后找到并重新定位按钮的 View

php - 如何将 NSMutableDictionary 发送到 PHP Web 服务器

ios - 如何在 objective-c 中调用的方法中传递五个值

ios - 28 个项目的数组不起作用。编译器没有任何反应

objective-c - 使用 addTarget :action:forControlEvents: method to change a UIImage?