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

Swift调用DynamoDB报Extra trailing closure passed in call错误

问题原因

该报错和配置无关,是AWS SDK for Swift版本与示例代码API不匹配导致:

  • 你复制的示例是基于0.x预览版SDK编写的,该版本API采用尾随闭包回调的形式返回结果
  • 1.0正式版及之后的AWS SDK for Swift全面废弃了回调式API,所有服务调用方法均改为Swift原生async/await异步模型,getItem方法不存在接收回调闭包的形参,额外传入的尾随闭包就会触发Extra trailing closure passed in call编译错误。
修正方案

直接使用SDK提供的async/await接口即可,修正后的函数代码如下:

func getDynamoDbItem(dynamoDbClient: DynamoDbClient,
                     nameOfTable: String,
                     keyName: String,
                     keyVal: String) async {
    let keyToGet = [keyName : DynamoDbClientTypes.AttributeValue.s(keyVal)]
    do {
        let response = try await dynamoDbClient.getItem(input: GetItemInput(key: keyToGet, tableName: nameOfTable))
        guard let numbersMap = response.item else {
            return
        }
        for returnedKey in numbersMap {
            print("\(returnedKey.key) : \(returnedKey.value)")
        }
    } catch {
        print(error)
    }
}

调用注意事项

如果需要在同步上下文(比如AppKit的按钮点击事件、视图生命周期方法中)调用上述async函数,需要将调用逻辑包裹在Task块中,示例:

@IBAction func handleQueryClick(_ sender: NSButton) {
    // 传入初始化好的DynamoDbClient实例、表名、键名键值即可
    Task {
        await getDynamoDbItem(
            dynamoDbClient: sharedDynamoDbClient,
            nameOfTable: "UserTable",
            keyName: "userId",
            keyVal: "10001"
        )
    }
}

如果需要兼容旧的回调逻辑,不需要降级SDK版本,自行用Task包装上述async方法,在拿到结果/捕获错误后手动调用传入的回调闭包即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:09:23