Swift4 中的 RxCocoa 映射可选错误,带有“无法转换类型“字符串?”的值
Posted
技术标签:
【中文标题】Swift4 中的 RxCocoa 映射可选错误,带有“无法转换类型“字符串?”的值【英文标题】:RxCocoa map optional error in Swift4 with 'Cannot convert value of type 'String?' 【发布时间】:2018-07-03 01:29:26 【问题描述】:在学习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() 时出错:
无法转换“字符串”类型的值?到预期的参数类型“字符串”
func validate(cardText: String) -> Bool
是map闭包内被调用函数的声明。
在查看 Apple 文档时,地图(可选)应该传递一个未包装的变量作为参数,因此 $0 应该已经被打开,我没有看到任何关于它被弃用或更改的说明。
不太清楚这里出了什么问题。
TIA
【问题讨论】:
【参考方案1】:RxSwift
的地图不会为您解包(Swift 的 btw 也不会;您可以使用 compactMap
从数组中删除 nil
s)。
RxSwift
有一个不错的小便利运算符,允许将 nil
转换为空字符串并避免可选:
textField.rx.text.orEmpty
旁注:addDisposableTo
已弃用;你应该使用disposed(by:)
【讨论】:
实际上,Swift 有两个 map() 函数,一个用于数组,一个用于可选项,Apple 文档说它会为您解开它:developer.apple.com/documentation/swift/optional/1539476-map以上是关于Swift4 中的 RxCocoa 映射可选错误,带有“无法转换类型“字符串?”的值的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 Xcode 构建错误“没有这样的模块 RxCocoa”?
在 Swift 4 中的 systemDouble 值中查找 nil
RxCocoa 中的 UICollectionViewDelegate
使用 Swift 4 中的 JSONDecoder,缺少的键可以使用默认值而不是可选属性吗?