2016-10-05 3 views
4

Я пытаюсь добавить сгенерированный SDK API шлюза AWS в мое приложение для iOS, написанное в Swift 3. В коде, создаваемом AWS, содержится много вещей, которые не компилируются в Swift 3, но, надеюсь, я могу работать с большинством их. Однако одна из ошибок заставила меня запутаться.Невозможно установить конфигурацию AWSAPIGatewayClient в Swift 3?

The (предкомпилированный) AWSAPIGatewayClient класс из библиотеки AWS выглядит следующим образом:

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

А класс, порожденный ребенок имеет эту инициализацию функцию:

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

    self.configuration = configuration 

    ... 
} 

Компилятор естественно жалуется, что свойство конфигурации is get-only:

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

Я пропустил что-то obviou s, или как это может работать? Я не смог найти кого-то другого с той же проблемой, что заставляет меня подозревать, что что-то не так с моим конкретным кодом.

+1

Я всегда использовал АМС API шлюза Obj-C код, сгенерированный в Swift 2.2 проекта. Я преобразовал свой проект в Swift 3, и он работает хорошо (все еще с кодом, сгенерированным с помощью obj-c). Сегодня я заметил, что они предоставляют код Swift. Я попытался заменить OBJ-код на сгенерированный Swift, но, как вы сказали, в нем много ошибок компиляции. Я не собираюсь исправлять ошибки компиляции в сгенерированном коде. Это должно быть готово. Я не могу найти документацию о сгенерированном Swift, когда она была введена, для какой версии и как ее использовать. Пока я буду придерживаться obj-c. –

+0

Спасибо, это был очень полезный ввод. Я попробую следующий подход, так как большая часть преимуществ автоматического генерации кода теряется, если вы должны вносить в него изменения каждый раз, когда вы его обновляете. –

ответ

3

Шлюз API SDK для Swift также содержит файл с именем AWSApiGatewayBridge.h в пакете, который импортируется через заголовок моста вашего приложения (показано в Bridging_Header.h).

Сгенерированный SDK не будет работать без AWSApiGatewayBridge.h, импортированного в ваш проект через объективный c-мост.

Спасибо, Rohan

+0

Я включил 'AWSApiGatewayBridge.h' в свой заголовочный файл моста, но что-то вроде этого объясняло бы многие вещи, которые могут возникнуть с созданным клиентом. Другим примером является строка 'private static var token: dispatch_once_t = 0' в сгенерированном клиенте, в соответствии с компилятором' dispatch_once_t' недоступна в Swift. Это просто вещь Swift 3, или это может быть ключом к тому, почему сгенерированный код не компилируется? –

+0

Это будет Быстрая вещь 3. Сгенерированный SDK корректно работает с Swift 2.3. Но проблемы, связанные с тем, что объект конфигурации является только читаемым, должны быть решены с помощью соединительного заголовка. Вы можете использовать альтернативный подход для решения проблемы dispatch_once_t, и ваш SDK должен работать нормально. –

+0

Я удалил и добавил мостовой файл заголовка из моих настроек сборки, очистил и построил проект, все еще безуспешно. Затем, когда я безнадежно возился с кодом, ошибки сборки начали исчезать с левой панели. Несколько остались, но проблема с конфигурацией исчезла! Я не знаю, почему это изменение не было немедленным, но я очень рад, что вы были правы. Благодаря! –