RxSwift と Moya を使用しています。私は得ています
致命的なエラー: オプション値のラップ解除中に予期せず nil が見つかりました
authors.map {...
tableViewControllerの行でエラーが発生しました。印刷authors
すると、nilであることがわかりました。そして、どこに問題があるのか わかりませんでした。Moya-ObjectMapper/RxSwift ライブラリを使用しています。最新リリースでは Observable+Objectmapper.swift ファイルが欠落しているため、github で見つけて置き換えました。
//import libraries
class AuthorsTableViewController: UITableViewController {
var viewModel: AuthorsViewModelType!
var authors: Driver<RequestResult<[Author]>>!
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
setUpBindings()
}
func setUpBindings() {
tableView.dataSource = nil
tableView.delegate = nil
authors.map { result -> [Author] in ---> Here
...
}.disposed(by: disposeBag)
}
}
私のビューモデル:
//import libraries
public protocol AuthorsViewModelType {
func getAuthors(destination: YazarAPI) -> Driver<RequestResult<[Author]>>
}
public class AuthorsViewModel: AuthorsViewModelType {
fileprivate var provider = YazarAPI.sharedProviderInstance
public func getAuthors(destination: YazarAPI) -> Driver<RequestResult<[Author]>> {
return provider.request(destination)
.observeOn(MainScheduler.instance)
.filterSuccessfulStatusCodes()
.mapAuthors(destination: destination)
.map { .Success($0) }
.asDriver(onErrorRecover: { error in
return .just(.Error(ReqestError(description: error.localizedDescription, code: .requestError)))
})
}
}
private extension Observable where E == Response {
func mapAuthors(destination: YazarAPI) -> Observable<[Author]> {
let authors: Observable<[Author]>
switch destination {
case .authors:
authors = self.mapObject(Authors.self).map { $0.authors ?? [] }
default:
fatalError("Unexpected request type \"\(destination)\"")
}
return authors
}
}