Hoe importeer ik een Swift-framework wereldwijd?

Ik wil een manier hebben om mijn Swift Cocoapods wereldwijd in elke klas te importeren, hoe kan ik dit bereiken?

Ik heb veel dingen geprobeerd en ze werkten niet. Hier zijn enkele manieren die ik nog niet heb geprobeerd en waarvan ik dacht dat ze mogelijk zouden zijn als ik een manier vond om ze te gebruiken:

Heb een algemene importverklaring zoals UIKit en plaats alles daarin. (Bewerken: dit is mislukt)

Plaats op de een of andere manier Swift-frameworks in de Obj-C-briding-header en importeer de dingen daar.


Antwoord 1, autoriteit 100%

U zou het globaal moeten kunnen importeren door @_exported toe te voegen vóór het importeren.

@_exported import Podname

Echter, zoals de eerder genoemde posters, wordt dit niet aanbevolen.


Antwoord 2, autoriteit 75%

Het wordt sterk afgeraden in Swift, omdat dat een impliciete koppeling tussen modules zou introduceren.

U kunt echter een bepaald symbool globaal beschikbaar maken door een typealiaste declareren in de module die de andere module importeert:

import ModuleName
public typealias ClassName = ModuleName.ClassName

Antwoord 3, autoriteit 32%

Vanaf Swift4:

  • In een Swift-project zitten
  • Wil je nog een Swift-project wereldwijd hebben
    geïmporteerd (en met cacaopods)

Het is me net gelukt door de volgende regel aan mijn overbruggingskop toe te voegen:

#import <PodName/PodName-Swift.h>

Hoe goed/slecht is deze praktijk? Ik weet het niet zeker, maar ik wilde gewoon wat extensies wereldwijd beschikbaar hebben in mijn project. dit deed de truc.


Antwoord 4, autoriteit 15%

Er is geenmanier om dit te doen. En dit is geen bug, dit is een taalfunctie (voor zover we het over Swift 2.2 hebben).

Swift gebruikt modules(Apple heeft ze geïntroduceerd in Xcode 5 voor Objective-C) en elk bestand is een semantische eenheid, dus je moet Xcode expliciet laten weten welke modules worden blootgesteld aan het gedefinieerde bestand.

p>

Niet alleen is er geen ondersteuning voor uw beschreven gedrag, maar u moet ook niet proberen het te omzeilen. Het gebruik van onnodige (ongebruikte) modules zou in theorie langzamere code kunnen produceren (rekening houdend met het feit dat de compiler deze informatie gebruikt voor zijn optimalisatieproces).


Antwoord 5, autoriteit 6%

Je kunt dezelfde functionaliteit handmatig bereiken door:

  • Het Objective-C Bridging Header-bestand;
  • #import <UIKit/UIKit.h>toevoegen aan het Objective-C Bridging Header-bestand (zodat u dit niet voor elk .swift-bestand hoeft te herhalen).

voor pods moet je doen zoals #import <SwiftyJSON/SwiftyJSON-umbrella.h>


Antwoord 6

Eenreden waarom je dit niet zou willen doen:

Stel je voor dat beide frameworks dezelfde methodenaamzouden gebruiken, het zou de compiler dubbelzinnig maken. De compiler weet niet welke methode hij moet uitvoeren.

Voor meer informatie, zie dezevraag

Other episodes