RxSwift 映射问题
Posted
技术标签:
【中文标题】RxSwift 映射问题【英文标题】:RxSwift Mapping issue 【发布时间】:2017-09-19 16:05:04 【问题描述】:我正在使用 RxSwift 和 Moya。我得到了
致命错误:在展开可选值时意外发现 nil
tableViewController 中 authors.map ...
行的错误。当我打印authors
时,我发现它是零。而且我找不到问题出在哪里。我正在使用 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
【问题讨论】:
【参考方案1】:您应该为 viewModel 和 authors 属性分配值,或者如果您在某处分配它们,请将 setupBindings() 也移动到那里。 P.S.:这不是 RxSwift 的问题
【讨论】:
以上是关于RxSwift 映射问题的主要内容,如果未能解决你的问题,请参考以下文章
RxSwift - Observable.generate - 使用附加映射处理顺序请求