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
相关产品推荐
相关产品推荐

