You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RxSwift泛型Observable扩展实现Alamofire上传进度与结果链式回调

问题原因

  • 原有扩展未正确声明泛型参数,直接在扩展头部使用UploadElement<Resource>时,编译器无法识别未定义的Resource类型
  • result方法中的Result参数未在作用域内声明,导致类型找不到报错

解决方案

将泛型约束下沉到方法级别,声明对应泛型参数即可,完整可运行的扩展代码如下:

import RxSwift

extension ObservableType {
    func progress<Result: Codable>(progressCompletion: @escaping (Double) -> Void) -> Self where Element == UploadElement<Result> {
        return self.do(onNext: { element in
            if case .progress(let progress) = element {
                progressCompletion(progress)
            }
        })
    }
    
    func result<Result: Codable>(resultCompletion: @escaping (Result) -> Void) -> Self where Element == UploadElement<Result> {
        return self.do(onNext: { element in
            if case .response(let result) = element {
                resultCompletion(result)
            }
        })
    }
}

调用验证

修改后的扩展完全支持预期的链式调用方式,编译器会自动推断泛型类型,不需要额外手动指定:

service.upload(url: targetUrl, parts: dataArray)
    .progress { progress in
        // 处理上传进度逻辑
    }
    .result { result in
        // 处理上传结果逻辑
    }
    .subscribe()
    .disposed(by: disposeBag)

内容的提问来源于stack exchange,提问作者Zico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:06:05