Result 类型
Result<Success, Failure>、get() 取值、map/flatMap 链式
Result 类型
Result<Success, Failure> 把成功和失败打包成一个类型——比 throws 更适合异步回调和链式处理。
学完本章你将: 掌握 Result 创建/get()、map/flatMap 链式。
Result 基础
swift
enum APIError: Error {
case networkError
case invalidResponse
}
func fetchUser(id: Int, completion: (Result<String, APIError>) -> Void) {
if id > 0 {
completion(.success("User \(id)"))
} else {
completion(.failure(.invalidResponse))
}
}
fetchUser(id: 1) { result in
switch result {
case .success(let user):
print("成功: \(user)")
case .failure(let error):
print("失败: \(error)")
}
}
map / flatMap 链式
swift
let result = Result<Int, Error>.success(42)
// map —— 转换成功值
let doubled = result.map { $0 * 2 }
// Result<Int, Error>.success(84)
// flatMap —— 链式调用(可能失败)
let validated = result.flatMap { value -> Result<Int, Error> in
guard value > 0 else { return .failure(APIError.invalidResponse) }
return .success(value * 10)
}
get() 取值
swift
// get() —— 成功返回值,失败抛错
do {
let value = try result.get()
print(value)
} catch {
print(error)
}