2015-10-21 13 views
8

ich zwei Gerüste in schnellen gebaut haben, nennen wir sie CoreFramework und MyFrameworkExpose Klassen von Abhängigkeiten in Swift Rahmen

MyFramework eine Abhängigkeit CoreFramework hat und nutzt einige CoreFramework ‚s Klassen, Strukturen und Aufzählungen in den öffentlichen Methoden , wie dies zum Beispiel:

public func fetchData() -> CoreStruct 

ich habe eine podspec für beiden Frameworks einzurichten und ich MyFramework als pod in meinem Projekt verwenden kann. In meinem Projekt schreiben würde ich so etwas wie:

let result = fetchData() 

Dies kompiliert und Xcode gibt mir auch die richtige Art, wenn ich alt + die Variable klicken, aber wenn ich möchte die Art von result wie dies explizit angeben:

let result: CoreStruct = fetchData() 

ich einen Compiler-Fehler und ich habe CoreFramework

Was muss ich tun, importieren, wie CoreStruct in meinem Projekt explizit Dinge in der Lage sein zu verwenden, ohne das zugrunde liegende Framework importieren zu müssen?

+0

Ich weiß nicht, wie Cocoapod funktioniert, aber ohne sie verwenden Sie normalerweise die 'Import' Anweisung für Frameworks wie Core Dara, Foundation und so weiter. Kannst du das bei Cocoapods weglassen? –

+0

Aber selbst wenn ich importieren würde sagen "CoreData" würde ich in der Lage sein Dinge wie 'NSManagedObject' ohne zusätzliche Importe im Projekt zu benutzen? Ich denke nicht – eyeballz

+0

nicht im Projektumfang, du hast Recht. Außer wenn Sie es in der Hauptdatei machen. –

Antwort

2

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

Es ist etwas, das ein „Umbrella Rahmen“ genannt, was Art tut, was Sie wollen, indem wir dir eine Fassade für mehrere subframeworks erstellen, aber Apple specifically discourages you from creating one.

dass Barring, müssen Sie sicherstellen, dass (in Ihrem Beispiel) fetchData() und CoreStruct werden in den gleichen Rahmen zusammengestellt, die Sie tun können, durch:

  • mit MyFrameworkCoreFramework ‚s-Code als git Submodul umfassen,
  • mit MyFramework Verwendung Cocoapods zu bauen CoreFramework im selben Arbeitsbereich (dh CoreFramework als pod veröffentlichen, und es in MyFrameworkohne die use_frameworks Option in die Poddatei, so dass Sie zwei Projekte in einem Arbeitsbereich erhalten, die in einem Framework kompiliert wurden),
  • Zusammenführen der Projekte (d. h. fügen Sie einfach alle Quelldateien von MyFramework und CoreFramework zum selben Projekt),

... oder irgendetwas anderes, das die beiden Quellbäume verursacht, in einen Rahmen erstellt werden.

+1

Danke für die Antwort. Könnten Sie näher auf die "mit MyFramework Cocoapods zum Erstellen von CoreFramework in den gleichen Arbeitsbereich" Teil? – eyeballz

+1

Siehe Änderungen. Es ist im Grunde nur eine raffinierte Art, die Codebasen zusammenzuführen, nur dann, wenn Sie Grund haben, CoreFramework unabhängig von MyFramework zu veröffentlichen/zu verwenden. –

+0

Okay, obwohl ich das in meinem speziellen Fall nicht verwenden kann, ist dies immer noch eine gute und gültige Antwort. Hoffe es hilft einigen Leuten – eyeballz

-1

Sie könnten diese besondere Art

import struct CoreFramework.CoreStruct 

nur importieren tun, The Swift Programming Language Reference: Import Declarations sehen.

+0

Aber das bedeutet, ich muss es immer noch importieren. Ich wollte in erster Linie jeden Import in 'CoreFramework' vermeiden. – eyeballz

+0

Da es die" akzeptierte Antwort "gibt, gibt es keine Möglichkeit dies zu tun. Die nächstbeste Lösung ist, das gesamte Framework zu importieren, was möglicherweise Ihren Namensraum verschmutzt. – eik

Verwandte Themen