Meine Situation verbraucht wird, ist die folgende:Get Obj-C Cocoapod API in Swift 3.0 Anwendungen
Ich habe ein SDK in Obj-C geschrieben und als Cocoapod verteilt. Es wird derzeit von meinen und meinen Benutzer-Apps verbraucht. Meine App wird hauptsächlich in Swift geschrieben, und ich benutze den Pod mit einem Bridging-Header, da mein SDK und einige andere 3rd-Party pod
's ich bin nicht als Frameworks exportiert, so wird die Verwendung von use_frameworks!
in podfile
nicht funktionieren.
Ich habe meine App mit dem XCode 8-Migrationstool zu Swift 3.0 migriert, jetzt wird es jedoch nicht mehr mit dem Cocoapod SDK kompiliert.
zum Beispiel - nach der Migration Aufruf an mein SDK:
SparkCloud.sharedInstance().getDevices({ (devices:[Any]?, error:Error?) -> Void in ...
Wird die folgende Kompilierung Fehler verursachen:
Cannot convert value of type '([AnyObject]?, NSError?) -> Void' to expected argument type '(([Any]?, Error?) -> Void)?'
was Sinn macht, da NSError ist jetzt Fehler und nicht typisierte NULL festlegbare NSArray von Obj-c löst jetzt auf [Any] auf, aber mein SDK spiegelt das nicht wider.
Obj-C SDK entsprechende Zeile ist:
-(NSURLSessionDataTask *)getDevices:(nullable void (^)(NSArray * _Nullable sparkDevices, NSError * _Nullable error))completion;
Ich versuchte NS_REFINED_FOR_SWIFT
auf meinem Obj-C-Funktion Header hinzufügen und eine Wrapper-Swift-Datei zur Freilegung des „richtigen“ Schnittstelle zu Swift 3.0 schreiben, aber ich bin verwirrt darüber, wie ich diese neue Swift "Header" -Datei in meinen Apps verpacke und konsumiere, da das SDK eine Cocoapod-Bibliothek (kein Framework) ist, und wie man die podspec
-Datei dafür modifiziert.
Irgendwelche Hilfe/tips/Richtungen werden sehr geschätzt!
Überprüfen Sie die Erstellungseinstellungen für den betreffenden Pod und sehen Sie, ob "use legacy swift" auf false/off gesetzt ist – Multinerd
Es gibt einige Änderungen in 'Any' und' AnyObject' in swift3 –