【问题标题】:Extending ReactiveCocoa扩展 ReactiveCocoa
【发布时间】:2015-11-08 05:52:18
【问题描述】:

我正在使用 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 时出现错误。它告诉我Value of type RACStream has no member throttle。如果我在throttle 之后调用max,它会给出类似的错误。

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

【问题讨论】:

  • 尝试使用self过滤器返回:return self.filter{ //////// }
  • @ProblemSlover 没有区别,还是一样的错误信息
  • 返回块怎么样 return self.filter { (val: Bool ) -&gt; () next in /// Your code }
  • 我刚刚尝试return self.filter { (next: AnyObject!) -&gt; Bool in /// },结果相同。

标签: swift swift2 reactive-cocoa


【解决方案1】:

根据source code 方法throttlesubscribeNextRACSignal 类的成员(它是RACStream 的子类),但是您的扩展方法适用于RACStream 类并且您调用方法@ 987654327@ 返回类型 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

【讨论】:

  • @Chris 不客气。我很高兴它对你有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 2019-02-25
  • 2020-09-10
  • 2014-09-23
  • 2014-11-18
  • 2015-11-17
  • 2013-06-11
相关资源
最近更新 更多