Quando Apple ha introdotto Swift , il loro nuovo linguaggio di programmazione, mi chiedo come puoi integrarlo con le librerie Objective-C esistenti disponibili tramite CocoaPods ?
Risposte:
Cocoapods 0.36 e versioni successive introduce l' use_frameworks!
istruzione che implica che l'intestazione di bridging non è richiesta per l'importazione di pod Objective-C in Swift.
Di seguito è riportato un esempio completo utilizzando MBProgressHUD e 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
Rimuovi #imports dall'intestazione del bridging o elimina il file dell'intestazione del bridging se non ti serve. Se scegli l'ultima possibilità, non dimenticare di eliminare il percorso (a questo file di intestazione del bridging eliminato) nella configurazione del tuo progetto Xcode.
Aggiungi import MBProgressHUD
e / o import Alamofire
all'inizio di ogni file Swift che necessita di queste classi.
Ora stai usando framework in buona fede, quindi i tuoi enum si sono spostati in volo! Potresti avere una riga di Swift che andava bene con l'intestazione di bridging come questa:
progressHUD.mode = MBProgressHUDModeIndeterminate
Questo ora deve diventare questo:
progressHUD.mode = MBProgressHUDMode.Indeterminate
Non è un grosso problema, ma il mucchio di errori potrebbe portarti fuori strada che hai un problema più grande di quello che hai se stai usando molte enumerazioni Objective-C.
Per tua informazione: immagino (dovrai testare da solo per essere sicuro) che use_frameworks! l'istruzione nel tuo Podfile è compatibile solo con i progetti Xcode destinati a iOS> = 8.
Sembra che il processo sia simile a quello descritto nella sezione Mix and Match della documentazione Using Swift with Cocoa and Objective-C .
pod install
.Example-Bridging-Header.h
e aggiungilo al progetto.Objective-C Bridging Header
per il tuo obiettivo:Ora puoi usare la tua libreria, in tal caso, MKUnits, nel tuo file Swift:
let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)
Maggiori informazioni qui: Integrazione di Cocoapods con un progetto Swift
#import <Reachability/Reachability.h>
piuttosto che #import "Reachability.h"
.
AGGIORNAMENTO : è stata rilasciata la versione stabile 0.36 di CocoaPods. Supporta ufficialmente Swift.
CocoaPods ora supporta Swift nella loro ultima versione 0.36. È ancora in versione beta ma funziona.
Per prima cosa devi installare la beta CocoaPods (attualmente beta 2) eseguendola nel tuo terminale.
sudo gem install cocoapods --pre
Questo è praticamente tutto. Puoi aggiungere librerie Swift come faresti normalmente.
Ma c'è un problema se vuoi aggiungere una libreria scritta in Objective-C a un progetto Swift tramite CocoaPods. Devi aggiungere la riga use_frameworks!
al tuo Podfile. Ecco un esempio.
use_frameworks!
platform :ios, '8.0'
pod 'MagicalRecord'
use_frameworks!
è solo per iOS> = 8 giusto? Se è così dovresti scrivere questo nella tua risposta.