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

Swift提示存在多余尾随闭包:AWS Amplify uploadData调用问题

解决Amplify Swift中uploadData方法的编译错误

问题代码

我在UIKit项目中使用Amplify Swift(替代已停用的Amplify iOS)测试AWS存储功能,参考旧版SwiftUI教程编写的代码如下,但第28行的uploadData调用出现编译错误:

import UIKit
import Amplify
import AWSCognitoAuthPlugin
import AWSS3StoragePlugin

class ViewController: UIViewController {
    let imageKey : String = "house-icon"
    let image : UIImage? = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()
        configureAmplify()
    }
    
    func uploadImage() {
        let houseImage = UIImage(systemName: "house")!
        let houseImageData = houseImage.jpegData(compressionQuality: 1)!
        
        // 此处第28行抛出编译错误
        Amplify.Storage.uploadData(key: imageKey, data: houseImageData, options: nil) {
            result in
            switch result {
            case .success( let uploadedData) :
                print(uploadedData)
            case .failure( let error ) :
                print(error)
            }
        }
    }

    func configureAmplify() {
        do {
            try Amplify.add(plugin: AWSCognitoAuthPlugin())
            try Amplify.add(plugin: AWSS3StoragePlugin())
            try Amplify.configure()
            print("amplify configured")
        } catch {
            print("couldn't add plugins \(error)")
        }
    }
}

问题原因

旧版Amplify iOS与当前Amplify Swift的API存在兼容性差异:uploadData方法的options参数在新版中不再接受nil,必须传入StorageUploadDataRequest.Options类型的实例(可以是默认配置)。

解决方案

将options: nil替换为options: .init()(使用默认上传选项),修改后的uploadImage函数如下:

func uploadImage() {
    let houseImage = UIImage(systemName: "house")!
    let houseImageData = houseImage.jpegData(compressionQuality: 1)!
    
    Amplify.Storage.uploadData(key: imageKey, data: houseImageData, options: .init()) {
        result in
        switch result {
        case .success(let uploadedData):
            print(uploadedData)
        case .failure(let error):
            print(error)
        }
    }
}

如果需要自定义上传配置(比如设置文件访问权限、添加元数据),可以初始化Options时传入对应参数,示例:

// 设置私有访问权限的上传选项
let uploadOptions = StorageUploadDataRequest.Options(accessLevel: .private)
Amplify.Storage.uploadData(key: imageKey, data: houseImageData, options: uploadOptions) { /* ... */ }

额外注意事项

  • 确保项目依赖的是最新版Amplify Swift组件,而非已停用的Amplify iOS
  • 若使用Swift Package Manager,检查Package.swift中依赖的是Amplify Swift官方仓库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:02:09