저는 MVVM 및 RxSwift의 초보자이며 다음 프로젝트에서 구현하려고합니다. 현재 로그인 모듈을 사용하고 있지만 모든 것이 정상적으로 작동하지만 응용 프로그램을 실행할 때마다 텍스트 필드를 내 ViewModel에 바인딩 할 때 "옵션 값을 언 래핑하는 동안 예기치 않게 nil이 발견되었습니다"라는 오류가 발생합니다.RXSwift 바인딩 반환 옵션 값을 unwrapping하는 동안 예기치 않게 nil이 발견되었습니다.
아무도 나를 없앨 수 있습니까? 는 여기에 내가 그것을 할 방법은 다음과 같습니다
class LoginViewController: UIViewController {
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var loginButton: UIButton!
private var loginViewModel: UserLoginViewModel!
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
emailTextField.rx.text.orEmpty
.bind(to: loginViewModel.emailAdd)
.disposed(by: disposeBag) <---- Displays "Unexpectedly found nil while unwrapping an Optional value"
passwordTextField.rx.text.orEmpty
.bind(to: loginViewModel.password)
.disposed(by: disposeBag) <---- Displays "Unexpectedly found nil while unwrapping an Optional value"
}
}
/////loginProtocol
protocol loginProtocol {
//MARK - Input
var emailAdd: Variable<String> { get }
var password: Variable<String> { get }
var loginButtonDidTap:PublishSubject<Void>{ get }
var loginActionResult: Driver<AutenticationStatus> { get }
}
/// VIEW MODEL
class UserLoginViewModel: loginProtocol {
var emailAdd: Variable<String>
var password: Variable<String>
let loginButtonDidTap = PublishSubject<Void>()
var loginActionResult:Driver<AutenticationStatus>
init(apiService: API) {
let emailV = Variable<String>("")
let passwordV = Variable<String>("")
emailAdd = emailV
password = passwordV
let usernameAndPassword = Observable.combineLatest(emailAdd.asObservable(), password.asObservable()) {
($0, $1)
}
loginActionResult = loginButtonDidTap.asObservable()
.withLatestFrom(usernameAndPassword)
.flatMapLatest { (emailAdd, password) in
return apiService.login(email: emailAdd, password: password)
}.asDriver(onErrorJustReturn:.error(.server))
}
}
감사합니다.
위 코드에서 초기화되지 않은 객체는'loginViewModel'입니다. – Yannick