gpt4 book ai didi

swift - 扩展 ReactiveCocoa

转载 作者:搜寻专家 更新时间:2023-11-01 06:43:08 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com