想象一下,我有一个网络客户端,使用RxSwift来包装URLSession。
我想使用一个guard语句并返回一个错误,但是我收到了一个错误 非空函数应返回…
只需使用:
guard let `self` = self else { observer(.error(NSError(domain: "", code: 0, userInfo: [:]))); return Disposables.create() }
但是,我不得不说我根本不是班上的粉丝。首先,RxSwift已经有一个dataTask的包装器:
func response(request: URLRequest) -> Observable<(response: HTTPURLResponse, data: Data)>
可以通过以下方式调用:
URLSession.shared.rx.response(request: myRequest)
还有 data(request:) 这将检查statusCode并发出错误,如果它不在200年代。
data(request:)
您可以简单地注入函数,而不是添加将其包装在不提供任何值的对象中的复杂性。例如:
struct MyViewModel { init(serverResponse: @escaping (URLRequest) -> Observable<Data>)... }
let myViewModel = MyViewModel(serverResponse: URLSession.shared.rx.data)
在测试中,您可以简单地传递一个返回的闭包 Observable<Data>.just(myTestData) 。
Observable<Data>.just(myTestData)