Необязательная ошибка сопоставления RxCocoa в Swift4 с «Не удается преобразовать значение типа« String? » - PullRequest
0 голосов
/ 03 июля 2018

При работе с учебником на 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
} 

Выдает ошибку при вызове map () для параметра $ 0:

Не удалось преобразовать значение типа 'String?' к ожидаемому типу аргумента 'String'

func validate(cardText: String) -> Bool

Является ли объявление вызываемой функции внутри замыкания карты.

При просмотре документов Apple карта (необязательно) должна передавать в качестве параметра развернутую переменную, поэтому $ 0 уже должна быть развернута, и я не вижу каких-либо примечаний к ней как устаревших или измененных.

Не совсем уверен, что здесь не так.

ТИА

1 Ответ

0 голосов
/ 03 июля 2018
Карта

RxSwift не развернется для вас (как, впрочем, и Swift; вы можете удалить nil s из массива с помощью compactMap).

RxSwift имеет небольшой удобный оператор, который позволяет преобразовать nil в пустую строку и избежать необязательных: textField.rx.text.orEmpty

Примечание: addDisposableTo устарело; Вы должны использовать disposed(by:)

...