我在做什么错?我如何从封闭中获得单身? 我如何从Alamofire.request获得价值?
func loadImageName(url: URL) -> Single<String> {
let data = try? Data(contentsOf: url)
guard let query = data else {
return .error(Error.notFound)
}
...
return Single.deferred {
Alamofire.request(request).responseJSON {
if let error = $0.error {
return Single<String>.error(error)
}
return Single<String>.just(result)
}
}
}
答案 0 :(得分:0)
在这种情况下,您需要使用Single.create
。
这需要一个带有单个参数的块。您可以调用此参数来传递SingleEvent
的函数,即.success(Element)
(在您的情况下,Element
是String
或.error
该块必须返回Disposable
。您可以构造一个Disposable
,在处置它时将做更多的工作。在网络请求的情况下,取消请求很有意义。
func loadImageName(url: URL) -> Single<String> {
let data = try? Data(contentsOf: url)
guard let query = data else {
return .error(Error.notFound)
}
// ...
Single.create { single in
let request = Alamofire.request(request).responseJSON {
if let error = $0.error {
return single(.error(error))
}
return single(.success(result))
}
return Disposables.create { request.cancel() }
}
}