在https://www.raywenderlich.com/138547/getting-started-with-rxswift-and-rxcocoa的教程中进行学习
使用Xcode 9.3和Swift4
有代码:
private func setupTextChangeHandling() {
let creditCardValid = creditCardNumberTextField
.rx
.text //1
.throttle(throttleInterval, scheduler: MainScheduler.instance) //2
.map { self.validate(cardText: $0) } //3
creditCardValid
.subscribe(onNext: { self.creditCardNumberTextField.valid = $0 }) //4
.addDisposableTo(disposeBag) //5
}
这在$ 0参数的map()调用中给出了错误:
无法转换类型为'String'的值?到预期的参数类型“字符串”
func validate(cardText: String) -> Bool
是地图闭包内部被调用函数的声明。
在查看Apple文档时,地图(可选)应该将unwrapped变量作为参数传递,因此$ 0应该已经被解包,并且我看不到它的任何注释已被弃用或更改。
不太确定这里出了什么问题。
TIA
答案 0 :(得分:0)
RxSwift
的地图不会为您打开(Swift的btw也不会;您可以使用nil
从数组中删除compactMap
s)。
RxSwift
有一个很好的便利操作符,它允许将nil
转换为空字符串并避免使用可选的:
textField.rx.text.orEmpty
旁注:addDisposableTo
已过时;您应该使用disposed(by:)