Wil*_*Cat 10 macos xcode ios swift combine
在 Combine 框架中,我们可以Error在使用tryMap.
但是,我们如何才能更具体地了解Error类型?
例如,
let publisher = urlSession.dataTaskPublisher(for: request).tryMap { (data, response) -> (Data, HTTPURLResponse) in
guard let response = response as? HTTPURLResponse else {
throw URLError(.cannotParseResponse)
}
return (data, response)
}
Run Code Online (Sandbox Code Playgroud)
如何指定Errorthis的类型publisher?我想使用URLError而不是Error.
我setFailureType(to:)在Combine框架中找到了方法。但是,它不适用于tryMap(_:).
setFailureType(to:)只是强制一个失败类型为失败类型的发布者Never。tryMap始终Error用作错误类型,因为 anyError可能会在闭包主体中抛出,因此您需要使用mapError强制URLError类型:
let map_error = publisher.mapError({ error -> URLError in
switch (error) {
case let url_error as URLError:
return url_error
default:
return URLError(.unknown)
}
})
Run Code Online (Sandbox Code Playgroud)