无法将类型 'SharedSequence<DriverSharingStrategy, Data?>' 的值转换为预期的参数类型
Cannot convert value of type 'SharedSequence<DriverSharingStrategy, Data?>' to expected argument type
我想解决这个错误。
“无法将类型 'SharedSequence<DriverSharingStrategy, ControlProperty<String?>.Element>'(又名 'SharedSequence<DriverSharingStrategy, Optional>')的值转换为预期的参数类型 'Driver'(又名 'SharedSequence<DriverSharingStrategy, String>')”
和
“无法将类型 'SharedSequence<DriverSharingStrategy, Data?>' 的值转换为预期的参数类型 'Driver'(又名 'SharedSequence<DriverSharingStrategy, String>')”
但我不知道如何解决这个错误。我不认为有什么东西适合 viewModel,但我不知道它是什么。出错的地方是asDriver。
我正在使用 RxSwift 和 MVVM 模式。
func bindViewModel() {
let api = ProfileAPI()
let input = ModifyProfileViewModel.input(nickName: nickNameTxtField.rx.text.asDriver(onErrorJustReturn: nil), userImage: image.asDriver(), doneTap: saveBtn.rx.tap.asSignal())
let output = viewModel.transform(input)
output.result.emit(onCompleted: { self.navigationController?.popViewController(animated: true)}
).disposed(by: rx.disposeBag)
}
这是我的ViewController代码
class ModifyProfileViewModel: ViewModelType {
let disposeBag = DisposeBag()
struct input {
let nickName: Driver<String>
let userImage: Driver<String>
let doneTap: Signal<Void>
}
struct output {
let result: Signal<String>
let isEnabled: Driver<Bool>
}
func transform(_ input: input) -> output {
let api = ProfileAPI()
let result = PublishSubject<String>()
let info = Driver.combineLatest(input.nickName, input.userImage)
let isEnabled = info.map { ![=13=].0.isEmpty }
input.doneTap.withLatestFrom(info).asObservable().subscribe(onNext: { nickName, image in
api.putModifyProfile().subscribe(onNext: { (response, statusCode) in
switch statusCode {
case .success:
result.onCompleted()
case .noHere:
result.onNext("fail")
default:
result.onNext("default")
}
}).disposed(by: self.disposeBag)
}).disposed(by: disposeBag)
return output(result: result.asSignal(onErrorJustReturn: ""), isEnabled: isEnabled.asDriver())
}
}
这是我的 ViewModel 代码
有什么问题?
问题出在这里:nickNameTxtField.rx.text.asDriver(onErrorJustReturn: nil)
是 Driver<String?>
类型,但您正试图将其分配给 Driver<String>
.
要么 map
前者 .map { [=14=] ?? "" }
要么改变后者以接受 Optionals。
我想解决这个错误。 “无法将类型 'SharedSequence<DriverSharingStrategy, ControlProperty<String?>.Element>'(又名 'SharedSequence<DriverSharingStrategy, Optional>')的值转换为预期的参数类型 'Driver'(又名 'SharedSequence<DriverSharingStrategy, String>')” 和 “无法将类型 'SharedSequence<DriverSharingStrategy, Data?>' 的值转换为预期的参数类型 'Driver'(又名 'SharedSequence<DriverSharingStrategy, String>')”
但我不知道如何解决这个错误。我不认为有什么东西适合 viewModel,但我不知道它是什么。出错的地方是asDriver。 我正在使用 RxSwift 和 MVVM 模式。
func bindViewModel() {
let api = ProfileAPI()
let input = ModifyProfileViewModel.input(nickName: nickNameTxtField.rx.text.asDriver(onErrorJustReturn: nil), userImage: image.asDriver(), doneTap: saveBtn.rx.tap.asSignal())
let output = viewModel.transform(input)
output.result.emit(onCompleted: { self.navigationController?.popViewController(animated: true)}
).disposed(by: rx.disposeBag)
}
这是我的ViewController代码
class ModifyProfileViewModel: ViewModelType {
let disposeBag = DisposeBag()
struct input {
let nickName: Driver<String>
let userImage: Driver<String>
let doneTap: Signal<Void>
}
struct output {
let result: Signal<String>
let isEnabled: Driver<Bool>
}
func transform(_ input: input) -> output {
let api = ProfileAPI()
let result = PublishSubject<String>()
let info = Driver.combineLatest(input.nickName, input.userImage)
let isEnabled = info.map { ![=13=].0.isEmpty }
input.doneTap.withLatestFrom(info).asObservable().subscribe(onNext: { nickName, image in
api.putModifyProfile().subscribe(onNext: { (response, statusCode) in
switch statusCode {
case .success:
result.onCompleted()
case .noHere:
result.onNext("fail")
default:
result.onNext("default")
}
}).disposed(by: self.disposeBag)
}).disposed(by: disposeBag)
return output(result: result.asSignal(onErrorJustReturn: ""), isEnabled: isEnabled.asDriver())
}
}
这是我的 ViewModel 代码 有什么问题?
问题出在这里:nickNameTxtField.rx.text.asDriver(onErrorJustReturn: nil)
是 Driver<String?>
类型,但您正试图将其分配给 Driver<String>
.
要么 map
前者 .map { [=14=] ?? "" }
要么改变后者以接受 Optionals。