用 Swift 实现 Promise,一文带你上手

2024-12-31 04:41:37   小编

用 Swift 实现 Promise,一文带你上手

在现代编程中,异步操作的处理是至关重要的。Promise 作为一种处理异步操作的模式,提供了一种更优雅、更可读的方式来管理异步流程。在 Swift 中,我们可以通过一些方式来实现 Promise 的功能。

让我们来理解一下 Promise 的核心概念。Promise 代表了一个尚未完成但未来可能会完成或失败的操作。它提供了两个方法:then 用于处理操作成功的情况,catch 用于处理操作失败的情况。

接下来,我们开始实现一个简单的 Promise 结构。

enum PromiseState {
    case pending
    case fulfilled(value: Any)
    case rejected(error: Error)
}

class Promise {
    var state: PromiseState =.pending
    var fulfillHandlers: [(Any) -> Void] = []
    var rejectHandlers: [(Error) -> Void] = []

    func fulfill(_ value: Any) {
        state =.fulfilled(value: value)
        fulfillHandlers.forEach { $0(value) }
    }

    func reject(_ error: Error) {
        state =.rejected(error: error)
        rejectHandlers.forEach { $0(error) }
    }

    func then(_ onFulfilled: @escaping (Any) -> Void) {
        fulfillHandlers.append(onFulfilled)
        if state ==.fulfilled(value: let value) {
            onFulfilled(value)
        }
    }

    func catch(_ onRejected: @escaping (Error) -> Void) {
        rejectHandlers.append(onRejected)
        if state ==.rejected(error: let error) {
            onRejected(error)
        }
    }
}

在上述代码中,我们定义了 PromiseState 枚举来表示 Promise 的三种状态:未决、成功和失败。Promise 类包含了状态、成功处理函数列表和失败处理函数列表。

有了这个基本的实现,我们可以使用它来处理异步操作。

let promise = Promise()

// 模拟异步操作
DispatchQueue.global().asyncAfter(deadline:.now() + 2) {
    if Bool.random() {
        promise.fulfill("操作成功")
    } else {
        promise.reject(NSError(domain: "ExampleError", code: 0, userInfo: nil))
    }
}

promise.then { result in
    print("成功: \(result)")
}.catch { error in
    print("失败: \(error.localizedDescription)")
}

通过这样的方式,我们可以更清晰地组织异步代码,使其更易于理解和维护。

使用 Swift 实现 Promise 可以大大提高异步操作的可读性和可维护性。希望您通过本文能够轻松上手在 Swift 中使用 Promise 来处理异步任务。

TAGS: Swift_Promise Swift 开发 Promise 实现 上手教程

欢迎使用万千站长工具!

Welcome to www.zzTool.com