이 오류를 해결하고 싶습니다. " '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 { !$0.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 { $0 ?? "" }
또는 선택적 개체를 받아들이는 후자를 변경합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다