2015-11-01 16 views
22

Voglio avere un modo per importare i miei Swift Cocoapods globalmente in ogni classe, come posso ottenere questo?Come importare un framework Swift a livello globale?

Ho provato un sacco di cose e non hanno funzionato. Ecco alcuni modi in cui non ho provato e ho pensato che fosse possibile se trovato un modo per lavorarli:

Avere una dichiarazione di importazione generale come UIKit e mettere tutto lì dentro. (Modifica: Questo errore)

In qualche modo, inserire i framework Swift nell'intestazione di scorrimento Obj-C e importare le cose lì.

+0

Sì, utilizzare un'intestazione di collegamento. Questa domanda potrebbe essere un duplicato di questo: http://stackoverflow.com/questions/30162622/import-framework-for-whole-project-at-one-place-in-swift – prolfe

+1

In realtà apparentemente questa risposta non è mai stata accettata, quindi potrebbe non funzionare ... Penso che la risposta potrebbe essere che non puoi farlo in fretta. Devi importare su ogni file che usa il framework, mi dispiace. – prolfe

+0

OP, cosa ti impedisce di accettare la risposta? @prolfe sfortunatamente non c'è modo di aggirare questo e questo è il modo buono - il codice è disponibile solo dove è necessario, quindi consente di compilare/eseguire tutto più veloce – Krodak

risposta

9

C'è il modo no per farlo. E questo non è un bug, questa è una funzionalità linguistica (finora, come parlando di Swift 2.2).

Swift utilizza moduli (Apple li introdotti in Xcode 5 per Objective-C) e ogni file è un'unità semantica, quindi è necessario informare in modo esplicito Xcode quali moduli sono esposti a file definito.

Non solo non c'è supporto per il tuo comportamento descritto, ma non dovresti provare anche a bypassarlo. L'uso di moduli non necessari (inutilizzati) potrebbe teoricamente produrre codice più lento (tenendo conto che il compilatore usa queste informazioni per il suo processo di ottimizzazione).

+0

Inoltre (o "a caso"), Xcode potrebbe acquisire magicamente conoscenza di uno dei tuoi framework per i tuoi file Swift, ma AppCode sarà completamente confuso. Devi "importare" su ogni file Swift nel client framework. –

+0

@Krodak Ti capita di avere un link Apple dove viene menzionato? Sono assolutamente d'accordo con te, ma mi piacerebbe davvero qualche forma di indicazione da parte di Apple. Grazie. –

0

Un ragione che non vorresti fare questo:

Immaginate se entrambi i tuoi quadri userebbe lo stesso nome del metodo, renderebbe le cose ambigue per il compilatore compiler.The non saprà quale metodo dovrebbe essere eseguito.

Per saperne di più vedi this domanda

12

E 'fortemente sconsigliato a Swift perché sarebbe introdurre accoppiamento implicito tra i moduli.

Tuttavia, si può fare un certo simbolo disponibile a livello globale dichiarando una typealias nel modulo che importa l'altro modulo:

import ModuleName 
public typealias ClassName = ModuleName.ClassName 
+0

I componenti con accoppiamento lasco al 100% esistono solo in teoria. Ci sono sempre alcune dipendenze della biblioteca globale attraverso l'intero progetto. Ad esempio, un registratore personalizzato con livelli di registro sarebbe un buon esempio. Pertanto, tipalità si adatta perfettamente in questi casi. – Centurion

2

Dal Swift4:

  • Essere in un progetto Swift
  • Desideri avere un altro progetto Swift a livello mondiale importato (e utilizzando cocoapods)

ho appena riuscito a farlo aggiungendo la seguente riga al mio header colmare:

#import <PodName/PodName-Swift.h> 

Quanto è buono/cattivo questa pratica è? Non sono sicuro, ma volevo solo alcune estensioni globalmente disponibili nel mio progetto. questo ha fatto il trucco

2

Dovresti riuscire a importarlo globalmente aggiungendo @_exported prima dell'importazione.

@_exported import Podname

Tuttavia, come i manifesti precedenti citati, questo non è raccomandato.

Problemi correlati