2016-10-05 58 views
4

我試圖將生成的AWS API網關SDK添加到我在Swift 3中編寫的iOS應用程序中。由AWS生成的代碼包含許多不能在Swift 3中編譯的內容,但希望我可以解決大部分他們。其中一個錯誤讓我感到困惑。無法在Swift 3中設置AWSAPIGatewayClient配置?

從AWS庫(預編譯)AWSAPIGatewayClient類看起來是這樣的:

open class AWSAPIGatewayClient : NSObject { 
    open var configuration: AWSServiceConfiguration! { get } 
    open var apiKey: String! 
} 

而生成的子類有這個初始化函數:

init(configuration: AWSServiceConfiguration) { 
    super.init() 

    self.configuration = configuration 

    ... 
} 

編譯器自然地抱怨說,配置屬性是隻能得到的:

AWSMyServiceClient.swift:127:25: Cannot assign to property: 'configuration' is a get-only property 

我是否缺少某物obviou s,或者這可能如何工作?我一直無法找到其他人有同樣的問題,這導致我懷疑我的特定代碼有什麼問題。

+1

我一直使用AWS的API網關對象 - 在雨燕2.2項目生成的代碼。我已經將我的項目轉換爲Swift 3,並且它運行良好(仍然使用obj-c生成的代碼)。我今天才注意到他們提供了Swift代碼。我試圖用生成的Swift替換obj-c代碼,但正如你所說,它有很多編譯錯誤。沒有辦法,我要解決生成的代碼中的編譯錯誤。這應該是開箱即用的。我找不到任何有關生成的Swift的文檔,當它被引入時,它的版本以及如何使用它。現在我會堅持obj-c。 –

+0

謝謝,這是非常有幫助的輸入。接下來我會嘗試這種方法,因爲如果每次更新它時都必須對其進行更改,自動生成代碼的許多優點都會丟失。 –

回答

3

爲Swift生成的API網關SDK還提供了一個名爲AWSApiGatewayBridge.h的文件,該文件通過應用程序的橋接頭導入(顯示在Bridging_Header.h)。

生成的SDK不會在沒有AWSApiGatewayBridge.h的情況下通過目標c橋接標頭導入您的項目。

感謝, 羅漢

+0

我在我的橋接頭文件中包含了'AWSApiGatewayBridge.h',但類似的東西可以解釋生成的客戶端感覺很多東西。另一個例子是生成的客戶端中的'private static var token:dispatch_once_t = 0'行,根據編譯器'dispatch_once_t'在Swift中不可用。這只是一個Swift 3的東西,或者它可能是一個線索,爲什麼生成的代碼不能編譯? –

+0

這將是一個Swift 3的東西。生成的SDK在Swift 2.3中正常工作。但是與配置對象相關的問題只能通過橋頭來解決。你可以採取另一種方法來解決dispatch_once_t問題,你的SDK應該工作正常。 –

+0

我從構建設置中刪除並添加了橋接頭文件,清理並構建了該項目,但仍未成功。然後,當我毫無希望地修改代碼時,構建錯誤開始從左側面板消失。一些仍然存在,但配置問題消失了!我不知道爲什麼變化不是直接的,但我很高興你是對的。謝謝! –