Z
ZHANK
错误与内存

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)
}