Моя ситуация следующая:Получить Obj-C Cocoapod API для потребления в Swift 3.0 приложения
У меня есть SDK, написанный на Obj-C и распределенной в качестве Cocoapod. В настоящее время он используется моими и моими приложениями для пользователей. Мое приложение написано в основном в Swift, и я использую модуль, используя заголовок с мостом, так как мой SDK и несколько других сторонних pod
, которые я потребляю, не экспортируются в качестве фреймворков, поэтому использование use_frameworks!
в podfile
не будет работать.
Я перенес свое приложение в Swift 3.0 с помощью инструмента миграции XCode 8, но теперь он не будет скомпилирован с SDK Cocoapod.
, например - после переноса вызова на мой SDK:
SparkCloud.sharedInstance().getDevices({ (devices:[Any]?, error:Error?) -> Void in ...
вызовет следующие компиляции ошибки времени:
Cannot convert value of type '([AnyObject]?, NSError?) -> Void' to expected argument type '(([Any]?, Error?) -> Void)?'
, который имеет смысл, так как NSError теперь Error и нетипизированное обнуляемое NSArray из Obj-c теперь разрешает [Any], но мой SDK не отражает этого.
Obj-C SDK соответствующая строка:
-(NSURLSessionDataTask *)getDevices:(nullable void (^)(NSArray * _Nullable sparkDevices, NSError * _Nullable error))completion;
Я пытался добавить NS_REFINED_FOR_SWIFT
мои заголовки функциональных Obj-C и написать обертку Swift файл для экспонирования в интерфейс «правильный» для Swift 3.0, но я озадачен тем, как я упаковываю и потребляю этот новый файл заголовка Swift в своих приложениях, учитывая, что SDK является библиотекой Cocoapod (а не фреймворком), а также как изменить файл podspec
.
Любая помощь/советы/направления приветствуются!
Проверьте настройки сборки для рассматриваемого элемента и посмотрите, установлено ли значение «Использовать устаревшее быстрое» значение «false/off». – Multinerd
есть некоторые изменения в 'Any' и' AnyObject' в swift3. –