【问题标题】:AWS APIGatewayClient(Swift) doesn't work in Swift3?AWS APIGatewayClient(Swift) 在 Swift3 中不起作用?
【发布时间】:2023-03-30 16:43:01
【问题描述】:

在 README.md 之后,我设置了包括 AWSApiGatewayBridge.h 在内的桥接头。

由 Swift 编写的生成客户端 SDK 在 Swift 3 中有很多编译器错误,所以我将生成的 Swift 2 代码替换为 Swift 3。

我都替换了它们:不从 APIGatewayClient 类实例化一个对象。

但 Xcode 显示以下错误消息。

“/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc 失败,退出代码为 1”

生成的Client.swift有init函数。

init(configuration: AWSServiceConfiguration) {
    super.init()
    self.configuration = configuration.copy() as! AWSServiceConfiguration
    ...
}

在函数中,我发现有一行出错。 但我找不到修复它的方法。

self.configuration = configuration.copy() as! AWSServiceConfiguration

如果该行被注释掉,Xcode可以编译成功。

这个错误是Xcode设置还是我个人问题? 任何人都可以在 Swift 3 中使用 APIGatewayClient(Swift)?

我使用 Xcode ver8.2.1

【问题讨论】:

    标签: swift swift3 aws-sdk aws-api-gateway


    【解决方案1】:

    生成的客户端 Swift SDK 在 Swift 3 中不起作用。

    如果您的应用程序是由 Swift 3 编写的,则需要使用 Objective C 生成的 SDK。

    https://github.com/aws/aws-sdk-ios/issues/510

    【讨论】:

      【解决方案2】:

      当我升级到 Xcode 版本 8.2.1 (8C1002) 时,我遇到了与 AWSServiceConfiguration 类似的问题。在分配您提到的 self.configuration = configuration.copy() 时,它会给我同样的错误! AWSServiceConfiguration。

      我在我的 AWSAPIGatewayClient 子类中覆盖了 AWSServiceConfiguration,并使用本地 var 作为过渡。然后在作业中使用它

      以下是我的解决方法。希望对您有所帮助。

      var customConfig:AWSServiceConfiguration?
      
      override open var configuration: AWSServiceConfiguration{
          get {
                  guard let config = customConfig else{
                      return AWSServiceConfiguration()
                  }
              return config
          }
          set(value) {
              self.customConfig = value
          }
      }
      

      然后像这样做作业。

      init(configuration: AWSServiceConfiguration) {
          super.init()
      
          //the below asignment causes a linking error
          // self.configuration = configuration.copy() as! AWSServiceConfiguration
      
          //this is the new assignment
          self.customConfig  = configuration.copy() as? AWSServiceConfiguration
      
          var URLString: String = "https://xxxxx.execute-api.us-east-1.amazonaws.com/xxxx"
          if URLString.hasSuffix("/") {
              URLString = URLString.substring(to: URLString.characters.index(URLString.startIndex, offsetBy: URLString.lengthOfBytes(using: String.Encoding.utf8) - 1))
          }
      
          self.configuration.endpoint = AWSEndpoint(region: self.configuration.regionType, service: .apiGateway, url: URL(string: URLString)!)
      
          let signer: AWSSignatureV4Signer = AWSSignatureV4Signer(credentialsProvider: self.configuration.credentialsProvider, endpoint: self.configuration.endpoint)
      
          if let endpoint = self.configuration.endpoint {
              self.configuration.baseURL = endpoint.url
          }
          self.configuration.requestInterceptors = [AWSNetworkingRequestInterceptor(), signer]
      }
      

      【讨论】:

      • 新 SDK 将端点更改为仅获取,因此您需要自己新建一个AWSServiceConfiguration
      猜你喜欢
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 2014-08-05
      相关资源
      最近更新 更多