2016-10-05 2 views
4

Ich versuche, ein generiertes AWS API Gateway SDK zu meiner in Swift 3 geschriebenen iOS App hinzuzufügen. Der von AWS generierte Code enthält viele Dinge, die nicht in Swift 3 kompiliert werden, aber hoffentlich kann ich die meisten von ihnen umgehen Sie. Einer der Fehler hat mich jedoch wirklich verwirrt.Sie können die AWSAPIGatewayClient-Konfiguration in Swift 3 nicht festlegen?

Die (vorkompilierte) AWSAPIGatewayClient Klasse von der AWS-Bibliothek sieht wie folgt aus:

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

Und das erzeugte Kind Klasse hat diese Funktion init:

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

    self.configuration = configuration 

    ... 
} 

Der Compiler beschwert sich natürlich, dass die Konfigurationseigenschaft ist Get-Only:

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

Bin mir etwas Obviou fehlt s, oder wie könnte das möglicherweise funktionieren? Ich konnte niemanden mit dem gleichen Problem finden, was mich vermuten lässt, dass etwas mit meinem speziellen Code nicht stimmt.

+1

Ich habe früher immer die AWS-API-Gateway obj-c-Code in einem Swift 2.2 Projekt erzeugt. Ich habe mein Projekt in Swift 3 konvertiert und es funktioniert gut (immer noch mit obj-c generierten Code). Ich habe gerade heute festgestellt, dass sie Swift-Code bereitstellen. Ich habe versucht, den Obj-c-Code durch den generierten Swift zu ersetzen, aber wie gesagt, er hat viele Kompilierungsfehler. Auf keinen Fall werde ich Kompilierfehler im generierten Code beheben. Dies sollte out-of-the-box funktionieren. Ich kann keine Dokumentation über das generierte Swift finden, wann es eingeführt wurde, für welche Version und wie es verwendet wird. Fürs Erste bleibe ich beim Obj-c. –

+0

Danke, das war sehr hilfreiche Eingabe. Ich werde diesen Ansatz als nächstes versuchen, da viele der Vorteile der automatischen Generierung von Code verloren gehen, wenn Sie bei jeder Aktualisierung Änderungen daran vornehmen müssen. –

Antwort

3

Das vom API-Gateway generierte SDK for Swift enthält auch eine Datei mit dem Namen AWSApiGatewayBridge.h im Paket, die über den Bridging-Header Ihrer App importiert wird (in Bridging_Header.h gezeigt).

Das generierte SDK funktioniert nicht ohne AWSApiGatewayBridge.h importiert in Ihrem Projekt über die objektive c Bridging-Header.

Danke, Rohan

+0

Ich habe 'AWSApiGatewayBridge.h' in meine Bridging-Header-Datei eingeschlossen, aber so etwas würde viele Dinge erklären, die sich mit dem generierten Client anfühlen. Ein weiteres Beispiel ist die Zeile 'private static var token: dispatch_once_t = 0' im generierten Client, je nachdem der Compiler' dispatch_once_t' in Swift nicht verfügbar ist. Ist das nur ein Swift 3-Ding oder könnte es ein Hinweis darauf sein, warum der generierte Code nicht kompiliert wird? –

+0

Es wäre eine Swift 3-Sache. Das generierte SDK funktioniert korrekt mit Swift 2.3. Die Probleme im Zusammenhang mit Konfigurationsobjekten, die nur lesbar sind, sollten jedoch mit dem Bridging-Header gelöst werden. Sie könnten einen alternativen Ansatz zur Behandlung des Problems dispatch_once_t wählen, und Ihr SDK sollte einwandfrei funktionieren. –

+0

Ich entfernte und fügte die Bridging-Header-Datei aus meinen Build-Einstellungen, bereinigt und baute das Projekt, immer noch ohne Erfolg. Dann, als ich hoffnungslos mit dem Code herumhakte, verschwanden die Build-Fehler von der linken Seite. Ein paar blieben, aber das Konfigurationsproblem ging weg! Ich weiß nicht, warum die Änderung nicht sofort war, aber ich bin sehr froh, dass du recht hast. Vielen Dank! –

Verwandte Themen