-1

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
    }
}
4

1 に答える 1