AWS APIGatewayClient(Swift)在Swift3中不起作用?

时间:2016-12-23 04:11:25

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

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

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

我全部替换了它们:不是从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中使用API​​GatewayClient(Swift)?

我使用Xcode ver8.2.1

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

当我升级到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]
}