Nehmen Sie ein Setup wie folgt an:
- Sie haben ein Xcode 6-Projekt, in dem Sie Ihre eigenen Klassen (z. B. MyView und MyViewController) mit Objective-C und Swift implementiert haben
- Sie haben Ihrem Projekt einen Spielplatz hinzugefügt
Auf dem Spielplatz ist es möglich, Module (Frameworks) wie UIKit
mit dem import
Schlüsselwort zu importieren . Wie können Sie vom Spielplatz aus auf die anderen Klassen des Projekts zugreifen?
Der Versuch, direkt auf Projektklassen zuzugreifen, führt zu einer Fehlermeldung: Verwendung des nicht aufgelösten Bezeichners 'MyView'
ios
swift
swift-playground
Markus Rautopuro
quelle
quelle
Antworten:
Ab Xcode 6.0 Beta 5 ist es jetzt möglich, eigene Frameworks in einen Spielplatz zu importieren. Auf diese Weise können Sie Code zwischen Ihren Anwendungen und Spielplätzen austauschen, wodurch beide Ihre Frameworks importieren können. Um dies zu tun:
Ihr Spielplatz muss sich im selben Arbeitsbereich befinden wie das Projekt, das Ihr Framework erstellt. Ihr Arbeitsbereich muss ein Ziel enthalten, das das Framework erstellt, anstatt ein vorgefertigtes Framework zu verwenden.
Sie müssen Ihr Framework bereits erstellt haben. Wenn es sich um ein iOS-Framework handelt, muss es für ein 64-Bit-Ausführungsziel (z. B. iPhone 5s) und für den Simulator erstellt werden.
Sie müssen über ein aktives Schema verfügen, das mindestens ein Ziel erstellt (der Build-Speicherort dieses Ziels wird im Framework-Suchpfad für den Spielplatz verwendet).
Ihre Einstellung "Build Location" (in den erweiterten "Locations" -Einstellungen von Xcode) sollte nicht auf "Legacy" gesetzt sein.
Wenn Ihr Framework kein Swift-Framework ist, muss die Build-Einstellung "Defines Module" auf "Yes" gesetzt werden.
Sie müssen Ihrem Spielplatz eine Importanweisung für das Framework hinzufügen.
Sobald alle diese Bedingungen erfüllt sind, funktioniert der Import Ihres Frameworks auf einem Spielplatz.
In Xcode 7 haben wir einen weiteren Mechanismus eingeführt, mit dem Sie Ihre eigenen Klassen als Quelle importieren können, anstatt ein Framework zu importieren. Weitere Informationen zu dieser Unterstützung für "Hilfsquellen" finden Sie unter http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af
quelle
Auf diese Weise konnte ich tatsächlich auf andere Swift-Dateien im aktuellen Projekt verweisen:
YourPlayground.playground
Bundle (ja, es ist ein Bundle = Verzeichnis) in Terminal.contents.xcplayground
zum Beispiel mitvi
und fügen Sie einen weiteren Abschnitt wie diesen hinzu:section-1.swift
insection-2.swift
(Wenn Sie den Spielplatz von Grund auf neu erstellt haben, solltesection-1.swift
Ihr Bundle ein Beispiel enthalten. )section-1.swift
der außerhalb des Bundles auf Ihre Swift-Klassendatei verweist, wie:Auf diese Weise kann ich tatsächlich Code ausführen, der außerhalb des Spielplatzes liegt, aber Xcode scheint dabei häufiger abzustürzen.
Bearbeiten:
Ab Xcode 6 Beta 5 können Sie jetzt auf Projektdateien verweisen, wie Rick Ballard in seiner Antwort anweist .
quelle
style='setup'
dem<code>
Tag hinzufügen , wird es als reduzierter / erweiterbarer Block angezeigt. Dies ist möglicherweise idealer, da die zusätzliche Datei bis zu einem gewissen Grad ausgeblendet wird.Seit Beta 5 von Xcode 6 ist es möglich, Ihren Code zu importieren, wenn er sich in einem Framework befindet. Sie müssen lediglich ein Framework-Ziel erstellen, die Swift-Dateien dort hinzufügen und auf Ihrem Spielplatz ausführen
import ModuleName
Sie können den Modulnamen in den Build-Einstellungen nachschlagen. Es ist normalerweise das gleiche wie der Zielname.
Denken Sie daran, den Code zu erstellen, den Sie sehen möchten
public
. Sie müssen das Projekt erstellen, bevor Änderungen auf dem Spielplatz verfügbar sind. (Sie müssen auch den Spielplatz bearbeiten, um eine erneute Ausführung auszulösen.)Wichtig
Geben Sie der Spielplatzdatei nicht den gleichen Namen wie dem Ziel! Wenn Sie dies tun, scheint der Import zu funktionieren, aber Sie werden die folgende Fehlermeldung erhalten, wenn der Spielplatz versucht, auszuführen:
Ich habe eine Stunde damit verschwendet, das herauszufinden. :) :)
quelle
public
. Markieren Sie einfach Ihren Import als@testable import ModuleName
Ich konnte es mit keiner der Antworten hier zum Laufen bringen, also fing ich an herumzuspielen und fand einen einfachen Weg, der für mich funktionierte, um eine schnelle Klasse auf einen Spielplatz zu importieren.
Erstellen Sie einfach einen Spielplatz in Ihrem Projekt, es gibt ein Verzeichnis mit dem Namen "Quellen", ziehen Sie einfach eine Kopie der schnellen Klasse in diesen Ordner und der Spielplatz hat dann Zugriff darauf.
Zum Beispiel:
quelle
public
, die Sie auf dem Spielplatz verwenden möchten. developer.apple.com/library/ios/documentation/Swift/Conceptual/… - Ich habe noch keine Swift-Ressource gefunden, die die Lücke zwischen dem Erlernen von Swift (einfach) und der tatsächlichen Organisation eines Swift-Projekts in XCode (bisher sehr unintuitiv) schließt. .Ich habe nur Links zu allen meinen schnellen Dateien in den
Sources
Ordner eingefügt:cd /path/to/project/MyPlayground.playground/Sources ln -s ../../*.swift .
Auf diese Weise werden Änderungen in Ihrer Quelldatei sofort auf Ihrem Spielplatz wirksam. Hat sehr gut funktioniert .
Xcode 8.2, Swift 3.0.1, macOS Sierra
quelle
Alles was Sie tun müssen - ist am Anfang zu schreiben:
import ModuleName
(vorausgesetzt, Ihr Spielplatz befindet sich im selben Arbeitsbereich wie das Framework / Projekt)
Wenn es nicht funktioniert:
Erstellen Sie Ihr Projekt neu
Erstellen Sie den Spielplatz neu und kopieren Sie alles vom alten Spielplatz
Es löst viele seltsame Fehler mit fehlgeschlagenen Inits und Importen von was auch immer!
quelle