Когда Apple представила Swift , свой новый язык программирования, мне интересно, как вы можете интегрировать его с существующими библиотеками Objective-C, доступными через CocoaPods ?
Ответы:
В Cocoapods 0.36 и выше представлена use_frameworks!инструкция, которая подразумевает, что заголовок моста не требуется для импорта модулей Objective-C в Swift.
Ниже приведен полный пример использования MBProgressHUD и Alamofire :
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!
pod 'Alamofire', '>= 1.2.2' # Swift pod
pod 'MBProgressHUD', '>= 0.9.1' # Objective-C pod
Удалите #imports из заголовка моста или даже файл заголовка моста, если он вам не нужен. Если вы выберете последний вариант, не забудьте удалить путь (к этому удаленному файлу заголовка моста) в конфигурации проекта Xcode.
Добавьте import MBProgressHUDи / или import Alamofireвверху всех файлов Swift, которым нужны эти классы.
Теперь вы используете добросовестные фреймворки, поэтому ваши перечисления начали летать! У вас может быть строка Swift, которая подходит для заголовка моста, например:
progressHUD.mode = MBProgressHUDModeIndeterminate
Теперь это должно стать таким:
progressHUD.mode = MBProgressHUDMode.Indeterminate
Ничего особенного, но куча ошибок может ввести вас в заблуждение, что у вас есть более серьезная проблема, чем если бы вы использовали много перечислений Objective-C.
Для информации: я полагаю (чтобы убедиться в этом, вам придется проверить это самостоятельно), что use_frameworks! Инструкция в вашем Podfile совместима только с проектами Xcode, ориентированными на iOS> = 8.
Кажется, что процесс похож на тот, который описан в разделе « Смешивание и сопоставление » документации « Использование Swift с Cocoa и Objective-C» .
pod install.Example-Bridging-Header.hи добавьте его в проект.Objective-C Bridging Headerдля вашей цели:
Теперь вы можете использовать свою библиотеку, в данном случае MKUnits, в своем файле Swift:
let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)
Подробнее здесь: Интеграция Cocoapods с проектом Swift
#import <Reachability/Reachability.h>а не #import "Reachability.h".
ОБНОВЛЕНИЕ : Выпущена стабильная версия CocoaPods 0.36. Он официально поддерживает Swift.
CocoaPods теперь поддерживает Swift в своем последнем выпуске 0.36. Он все еще находится в стадии бета-тестирования, но работает.
Сначала вам нужно установить бета-версию CocoaPods (в настоящее время бета 2), запустив ее в своем Терминале.
sudo gem install cocoapods --pre
Это почти все. Вы можете добавлять библиотеки Swift, как обычно.
Но есть одна загвоздка, если вы хотите добавить библиотеку, написанную на Objective-C, в проект Swift через CocoaPods. Вам нужно добавить строку use_frameworks!в свой Podfile. Вот пример.
use_frameworks!
platform :ios, '8.0'
pod 'MagicalRecord'
use_frameworks!это только для iOS> = 8 верно? Если да, напишите это в своем ответе.
Теперь вы можете использовать версию cocoapods 0.36.0, запустив sudo gem install cocoapodsкоторая поддерживает интеграцию быстрых фреймворков. Когда вы используете фреймворк, написанный на swift, вы должны явно использовать его в Podfile:
platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'