swift - 扩展 ReactiveCocoa

标签 swift swift2 reactive-cocoa

我正在使用 ReactiveCocoa 4.0.4 alpha 1 和 Swift 2.1。我正在尝试编写一个扩展,在 UITextField 上创建最大文本限制。

extension RACStream {
    public func max(textField: UITextField, max: Int) -> RACStream! {

        return filter { next in
            if let str = next as? String {
                let ret = str.characters.count < max
                if !ret {
                    textField.text = str[0..<max-1]
                }
                return ret
            }
            return true
        }
    }
}

self.inputTextField.rac_textSignal()
    .max(self.inputTextField, max: 7)
    .throttle(0.25)
    .subscribeNext { (obj: AnyObject!) -> Void in
        let input = Int(obj as! String)
        print(input)
     }

当我尝试调用 max 时出现错误。它告诉我 RACStream 类型的值没有成员 throttle。如果我在 throttle 之后调用 max,它会给出类似的错误。

我查看了 RACStream 类检查过滤器。由于它返回 Self!,它指的是 RACStream,我假设当我扩展类时,通过返回 RACStream! 会导致类似的行为。为什么我的管道的其余部分不响应我的扩展功能?

最佳答案

根据 source code方法 throttlesubscribeNext 是类 RACSignal 的成员(它是 RACStream 的子类),但是您的扩展方法是用于类 RACStream 并且您调用方法 rac_textSignal() 返回类型 RACSignal 。因此,为了消除问题中描述的错误,您应该为 RACSignal 而不是 RACStream 编写扩展。

 extension RACSignal {
         public func max(textField: UITextField, max: Int) -> RACSignal {

         // method filter can be invoked since RACSignal is subclass of RACStream

           return filter { next in
                    if let str = next as? String {
                        let ret = str.characters.count < max
                        if !ret {
                            textField.text = str[0..<max-1]
                        }
                        return ret
                    }
                    return true
                } 

          }  // Func

} // RacSignal Ext

关于swift - 扩展 ReactiveCocoa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33591173/

相关文章:

ios - 如何在不进行身份验证的情况下将核心数据持久化到云端

swift - 用于 Facebook 登录的自定义 UIButton

ios - 为 UIPickerView 创建公制和英制高度数组?

ios - Swift 中枚举的默认值

ios - 如何使用 Reactive Cocoa 并行 AFNetworking 请求并按顺序处理响应

ios - ReactiveCocoa,在按钮启用时结合两个信号

swift - RxSwift 正确的方式

ios - 设置 currentPageIndicatorTintColor 的错误

iOS - 调整导航栏高度的细节

swift - 物理形状在接触时与对象的形状不匹配