【发布时间】:2020-12-06 23:54:47
【问题描述】:
我想从服务器获取数据并更新我的数据库,之后我会向用户显示收到的数据。为了这个目标,我的视图模型中有一个方法(getData()),它返回一个Single,我在视图控制器(myVC.getData.subscribe({single in ...}))中调用并订阅这个方法,首先我调用并订阅(#1) (getUnread()->Single) 方法运行但我无法获取单个事件,我不明白为什么我无法在回调(#4) 中获取事件(#3)
之后我想通过调用(#2)(save([Moddel])->single)来保存数据
//I removed some part of this code it was to big
//This method is View Model
func getData() -> Single<[Model]> {
return Single<[Model]>.create {[weak self] single in
//#1
self!.restRepo.getUnread().subscribe({ [weak self] event in
//#4
switch event {
case .success(let response):
let models = response
//#2
self!.dbRepo.save(issues!).subscribe({ event in
switch event {
case .success(let response):
let models = response
single(.success(models))
case .error(let error):
single(.error(error))
}
}).disposed(by: self!.disposeBag)
case .error(let error):
single(.error(error))
}
}).disposed(by: self!.disposeBag)
return Disposables.create()
}
}
。 .
//I removed some part of this code it was to big
//This method is in RestRepo class
func getUnread() -> Single<[Model]> {
return Single<[Model]>.create { single in
let urlComponent = ApiHelper.instance.dolphinURLComponents(for: ApiHelper.ISSUES_PATH)
var urlRequest = URLRequest(url: urlComponent.url!)
ApiHelper.instance.alamofire.request(urlRequest).intercept().responseJSON { response in
debugPrint(response)
let statusCode = response.response?.statusCode
switch statusCode {
case 200:
do {
let models = try JSONDecoder().decode([Model].self, from: response.data!)
//#3
single(.success(models))
}catch{
print(error)
}
case 304:
debugPrint(response)
default:
single(.error(IssueResponseStatusCodeError(code: statusCode ?? 0)))
}
}
return Disposables.create()
}
【问题讨论】:
标签: ios swift rx-swift observers subscribe