满血版DS-R1(18201798243同v)

首页 经验

swift一个异步上传方法,它接受一个 逃逸闭包(escaping closure) 作为完成回调

时间: 2025-06-07 16:55:31

(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)

你给出的函数定义:

func uploadRecording(completion: @escaping (Result) -> Void)

表示一个异步上传方法,它接受一个 逃逸闭包(escaping closure) 作为完成回调,闭包的参数是 Result<String, Error> 类型。  


Result 类型解析:

Result 是 Swift 标准库中的一个枚举,用于表示成功或失败的操作:

enum Result where Failure: Error {
    case success(Success)  // 成功时返回 Success 类型的数据
    case failure(Failure)  // 失败时返回 Error 类型的错误
}

- Success 泛型参数是 String,表示成功时返回一个字符串。

- Failure 泛型参数是 Error,表示失败时返回一个错误。




如果你想返回更多数据(如 result: String + f: String 或字典):

1️⃣ 返回多个字符串(元组方式)

func uploadRecording(completion: @escaping (Result<(String, String), Error>) -> Void) {
    // 上传成功后:
    completion(.success(("resultData", "additionalData")))
    // 失败时:
    completion(.failure(SomeError()))
}

调用方式:

uploadRecording { result in
    switch result {
    case .success((let resultData, let additionalData)):
        print("成功: $resultData), $additionalData)")
    case .failure(let error):
        print("失败: $error)")
    }
}


2️⃣ 返回字典([String: Any]

func uploadRecording(completion: @escaping (Result<[String: Any], Error>) -> Void) {
    let responseDict = ["result": "data", "f": "value", "otherKey": 123]
    completion(.success(responseDict))
}

调用方式:

uploadRecording { result in
    switch result {
    case .success(let dict):
        if let resultStr = dict["result"] as? String {
            print("结果: $resultStr)")
        }
    case .failure(let error):
        print("失败: $error)")
    }
}


3️⃣ 自定义结构体/类(推荐 ✅)

如果返回的数据结构复杂,建议使用 structclass

struct UploadResponse {
    let result: String
    let f: String
    let metadata: [String: Any]?
}

func uploadRecording(completion: @escaping (Result) -> Void) {     let response = UploadResponse(result: "data", f: "value", metadata: nil)     completion(.success(response)) }

调用方式:

uploadRecording { result in
    switch result {
    case .success(let response):
        print("成功: $response.result), $response.f)")
    case .failure(let error):
        print("失败: $error)")
    }
}




总结:

返回类型示例适用场景
Result&lt;String, Error&gt;.success(&quot;done&quot;)只返回简单字符串
Result&lt;(String, String), Error&gt;.success((&quot;data1&quot;, &quot;data2&quot;))返回多个字符串
Result&lt;[String: Any], Error&gt;.success([&quot;key&quot;: &quot;value&quot;])返回字典(灵活性高,但类型不安全)
Result&lt;CustomStruct, Error&gt;.success(UploadResponse(...))最佳实践,类型安全,可扩展


推荐使用 struct 封装数据,而不是字典或元组,因为它更安全、可读性更好。 🚀


还有问题,向AI提问。


上一个 the `RecordButton` and `InputToolbarView` 文章列表 下一个 在 SwiftUI 中,当你想要在 Button 的 action 里调用

(汉语/英语/日语/法语/德语)语音助手(识别/合成),智能翻译,高中物理动画,数据分析,数据可视化,电话: 18201798243(同v)

本站非DeepSeek官网,本站域名售卖中

最新

工具

© 2019-至今 适观科技

沪ICP备17002269号