Swift4中的RxCocoa映射可选错误,显示“无法转换类型为'String'的值?”

时间:2018-07-03 01:29:27

标签: swift swift4 rx-swift rx-cocoa

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

1 个答案:

答案 0 :(得分:0)

RxSwift的地图不会为您打开(Swift的btw也不会;您可以使用nil从数组中删除compactMap s)。

RxSwift有一个很好的便利操作符,它允许将nil转换为空字符串并避免使用可选的: textField.rx.text.orEmpty

旁注:addDisposableTo已过时;您应该使用disposed(by:)