Frage Expose Klassen von Abhängigkeiten in Swift Framework


Ich habe zwei Frameworks in swift erstellt, nennen wir sie CoreFramework und MyFramework

MyFramework hat eine Abhängigkeit zu CoreFramework und verwendet einige von CoreFrameworkKlassen, Strukturen und enums in seinen öffentlichen Methoden, wie zum Beispiel:

public func fetchData() -> CoreStruct

Ich habe eine Podspec für beide Frameworks eingerichtet und kann sie verwenden MyFramework als Pod in meinem Projekt. In meinem Projekt würde ich etwas schreiben wie:

let result = fetchData()

Dies kompiliert und Xcode gibt mir sogar den richtigen Typ, wenn ich die Variable alt + klicke, aber wenn ich den Typ explizit angeben möchte result so was:

let result: CoreStruct = fetchData()

Ich bekomme einen Compilerfehler und muss importieren CoreFramework

Was muss ich tun, um Dinge wie CoreStruct in meinem Projekt, ohne das zugrunde liegende Framework importieren zu müssen?


8
2017-10-21 09:30


Ursprung


Antworten:


Es gibt keine Möglichkeit in Swift, das Importieren eines Moduls automatisch zu importieren. Das war eine bewusste Entscheidung für den Teil der Sprachdesigner, und Swift ist streng daran.

Es gibt etwas, das als "Umbrella Framework" bezeichnet wird irgendwie macht was Sie wollen, indem Sie eine Fassade für mehrere Unterrahmen erstellen, aber Apple rät ausdrücklich davon ab, einen zu erstellen.

Abgesehen davon müssen Sie sicherstellen, dass (in Ihrem Beispiel) fetchData() und CoreStruct sind in den gleichen Rahmen zusammengefasst, den Sie tun könnten, indem Sie:

  • haben MyFramework einschließen CoreFramework'S Code als ein Git-Submodul,
  • haben MyFramework Verwenden Sie Cocoapods, um zu bauen CoreFramework innerhalb desselben Arbeitsbereichs (d. h. veröffentlichen CoreFramework als Pod, und schließen Sie es ein MyFramework  ohne das use_frameworks Option in der Poddatei, so dass Sie zwei Projekte in einem Arbeitsbereich erhalten, die in einem Framework zusammengefasst sind),
  • Zusammenführen der Projekte (d. h. fügen Sie einfach alle Quelldateien hinzu) MyFramework und CoreFramework zum selben Projekt),

... oder irgendetwas anderes, das bewirkt, dass die beiden Quellbäume in einem Framework kompiliert werden.


2
2017-10-30 00:21



Du könntest es tun

import struct CoreFramework.CoreStruct

um nur diesen speziellen Typ zu importieren, siehe Die Swift-Programmiersprachenreferenz: Erklärungen importieren.


-1
2017-10-30 00:01