Когда 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'