Division eine Swift-Anwendung Komponenten in Swift-Module
Schreibe ich eine iOS-Anwendung in Swift, und ich versuche, herauszufinden, wie organisieren Sie das Projekt in separate Module. Ich bin mit einer MVVM-Architektur, und ich möchte das Model, ViewModel und View-Komponenten separate Swift-Module, die machen nur Teilmengen von sich selbst zugänglich zu den Modulen, die diese importieren. Die Dateien in der Ansicht importieren das ViewModel und die Dateien in das ViewModel würde, importieren Sie das Modell. Wie kann ich dies erreichen? Beachten Sie, dass ich nicht versuchen werde, zum erstellen von Bibliotheken, die von mehreren Anwendungen gemeinsam nutzen können. Ich versuche nur, um durchzusetzen, Trennung von Komponenten über Module.
EDIT: Vielleicht ist die Frage, "Welche Methode sollte ich verwenden, um erstellen Module, abgesehen von der, die kommt mit der ersten iOS-Anwendung-Projekt?".
Eine der Antworten, die in "Wie verwenden Sie Namespaces in Swift?" https://stackoverflow.com/a/24032860/215400 sagt, "Klassen (etc) sind implizit Gültigkeitsbereich durch das Modul (Xcode target) Sie sind in." Aus, dass, könnte man schlussfolgern, dass die Ziele entsprechen Module und die Antwort ist, erstellen Sie separate Ziele in ein Xcode-Projekt, aber ich habe versucht, die früheren, und tskulbru ist zu sagen, dass ich mehrere Xcode-Projekte.
Bezüglich mehrerer Xcode-Projekte, die Datei - > Neue > Projekte > iOS-Framework & Library > Cocoa Touch Framework option nicht richtig, weil es eigentlich für Dinge verwenden, UIKit, und zwei der Module, die ich erstellen möchten, sollte nicht davon abhängen, UIKit. Die anderen "Rahmen & Library" - option, Cocoa Touch static library, eine option nicht mit Swift.
Anderen StackOverflow-post erwähnt, die private Kapseln. Nachdem er eine Stunde arbeiten, habe ich festgestellt, dass es nicht die richtige Lösung ist, weil ich nicht haben sollte, um diese zu Bearbeiten-Module in verschiedenen Arbeitsbereichen.
- Mögliche Duplikate von Wie benutzt man Namespaces in Swift?
- Warum nicht die
private
qualifier durchsetzen Kapselung? - aber die Dinge privat zu den Dateien, die Sie definiert ist nicht, was ich will. Die öffentlichen und internen Zugriff, die Module (developer.apple.com/library/ios/documentation/Swift/Conceptual/...) ist genau das, was ich will.
- Der name "Cocoa Touch Framework" ist irreführend, und wohl ausgewählt von Apple für die Marktfähigkeit Gründen. Wirklich, es sollte aufgerufen werden, ein "Darwin-Framework" oder ähnlich. Was für ein "Cocoa Touch Framework" wirklich baut ist ein dynamic shared library verpackt in einem
….framework
— es kann davon abhängen, UIKit oder AppKit und Foundation oder CoreFoundation oder andere Frameworks(s) oder gar keine Abhängigkeiten haben (je nur auf std/system C APIs). Zu machen, nicht davon abhängen, UIKit, gehen Sie in die Projekt-Einstellung und ersetzenUIKit.framework
im Verlinkten Frameworks mitFoundation.framework
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies nicht möglich ist, ohne dass separate Projekte für die Module, die Sie erstellen möchten. Dies ist, weil die Möglichkeit, Swift-Griffe Verwendung von Namensräumen.
Eonil beantwortet das besser als ich: https://stackoverflow.com/a/24032860/215400
(Kopie unten)
Beantwortet SevenTenEleven in der Apple dev forum:
Auch Chris Lattner tweeted über Namensräume.
Aus meiner Sicht, wenn Sie wollen, Ihre Komponenten zu Kapseln, Sie wahrscheinlich haben zwei Lösungen:
Beide Lösungen geben Ihnen vollständig gekapselte Module, wo Sie können festlegen, API werden im Projekt durch
public
Schlüsselwort.Alle anderen Dinge, die nicht sichtbar in Ihrem Kern-Projekt.
Verwalten Ihrer Projekt kostet viel mehr Zeit, aber wenn Sie schreiben, diese mit FESTEN Grundsätzen, wahrscheinlich werden Sie mehr bekommen, wiederverwendbaren code und diese frameworks importiert werden konnten, um anderen Projekt nur mit
import
definition.