Frage

Nehmen Sie ein Setup wie dieses an:

  • Sie haben ein Xcode 6-Projekt, in dem Sie Ihre eigenen Klassen (z. B. MyView und MyViewController ) sowohl mit Objective-C als auch mit Swift implementiert haben
  • Sie haben Ihrem Projekt einen Spielplatz hinzugefügt

Auf dem Spielplatz ist es möglich, Module (Frameworks) wie zu importieren UIKit mit dem import Schlusselwort.Wie ermöglichen Sie den Zugang zu den anderen Klassen des Projekts vom Spielplatz aus?

Nur der Versuch, direkt auf Projektklassen zuzugreifen, führt zu einer Fehlermeldung:Verwendung der nicht aufgelösten Kennung 'MyView'

War es hilfreich?

Lösung

Ab Xcode 6.0 Beta 5 ist jetzt möglich, Ihre eigenen Rahmenbedingungen in einen Spielplatz zu importieren. Dies bietet einen Weg, um den Code zwischen Ihren Anwendungen und den Spielplätzen zu teilen, was beide Ihre Frameworks importieren können. Dazu tun:

    .
  1. Ihr Spielplatz muss sich im selben Arbeitsbereich befinden wie das Projekt, das Ihren Rahmen erzeugt. Ihr Arbeitsbereich muss ein Ziel enthalten, das das Framework erstellt, anstatt einen vorgebauten Rahmen zu verwenden.

  2. Sie müssen Ihren Rahmen bereits erstellt haben. Wenn es sich um ein iOS-Framework handelt, muss es für ein 64-Bit-Laufziel (z. B. iPhone 5s) gebaut und für den Simulator aufgebaut sein.

  3. Sie müssen über ein aktives Schema verfügen, das mindestens ein Ziel aufbaut (der Bauort des Ziels wird im Rahmensuchpfad für den Spielplatz verwendet).

  4. Ihre Präferenz "PAINE STOCK" (in Erweiterten "Standorte" der Einstellungen von Xcode) sollten nicht auf "Legacy" eingestellt werden.

  5. Wenn Ihr Framework kein Swift-Framework ist, muss das "Modul definiert" eingestellt sein, das auf "Ja" eingestellt ist.

  6. Sie müssen Ihrem Spielplatz für den Rahmen eine Import-Erklärung hinzufügen.

  7. Wenn alle diese Bedingungen erfüllt sind, funktioniert das Import Ihres Rahmens in einem Spielplatz.

    In Xcode 7 haben wir einen anderen Mechanismus eingeführt, mit dem Sie Ihre eigenen Klassen als Quelle importieren können, anstatt einen Rahmen zu importieren. Sie können über diese "Hilfsquellen" bei http://help.apple lesen. com / xcode / mac / 8.0 / # / devfa5bea3AF

Andere Tipps

Auf diese Weise habe ich es tatsächlich geschafft, auf andere Swift-Dateien im aktuellen Projekt zu verweisen:

  • Erstelle einen leeren Spielplatz und Platz ist irgendwo unter deinem Projekt.
  • Öffnen Sie die YourPlayground.playground bundle (ja, es ist ein bundle = Verzeichnis) im Terminal.
  • Bearbeiten contents.xcplayground zum Beispiel mit vi und fügen Sie einen weiteren Abschnitt wie diesen hinzu:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<playground version='3.0' sdk='iphonesimulator'> 
   <sections>
       <code source-file-name='section-1.swift'/>
       <code source-file-name='section-2.swift'/>
   </sections>
   <timeline fileName='timeline.xctimeline'/>
</playground>
  • Umbenennen section-1.swift zu section-2.swift (wenn Sie den Spielplatz von Grund auf neu erstellt haben, sollte es ein Beispiel geben section-1.swift in Ihrem Bundle)
  • Fügen Sie ein Hardlink (symbolischer Link scheint nicht zu funktionieren) benannt section-1.swift das zeigt außerhalb des Bundles auf Ihre Swift-Klassendatei wie:
ln ../../Classes/MyView.swift section-1.swift
  • Schließen Sie Xcode und öffnen Sie den Spielplatz erneut.
  • Jetzt sollte es zwei Abschnitte geben, einen mit dem Inhalt Ihrer Swift-Klassendatei und den anderen mit dem Beispielinhalt, den Sie beim Erstellen des Spielplatzes von Grund auf erhalten haben.

Auf diese Weise kann ich tatsächlich Code ausführen, der außerhalb des Spielplatzes liegt, aber Xcode scheint häufiger abzustürzen, wenn ich es so mache.

Bearbeiten:

Ab Xcode 6 Beta 5 können Sie jetzt auf Projektdateien verweisen, wie Rick Ballard in seinem anweist Antwort.

Da BETA 5 von Xcode 6 Ihren Code importieren kann, wenn er sich in einem Rahmen befindet.Was Sie tun müssen, ist, ein Framework-Ziel zu erstellen, die Swift-Dateien dort hinzuzufügen, und in Ihrem Spielplatz

generasacodicetagpre.

Sie können den Modulnamen in den Build-Einstellungen nachschlagen.Es ist normalerweise derselbe wie der Zielname.

Denken Sie daran, den Code zu erstellen, den Sie generieren möchten, den Sieg-GriztreticetAgcode sehen möchten.Sie müssen das Projekt aufbauen, bevor Änderungen auf dem Spielplatz verfügbar sind.(Sie müssen auch den Spielplatz bearbeiten, um die Wiederausführung auszulösen.)

wichtig

Geben Sie der Spielplatzdatei nicht denselben Namen wie das Ziel an!Wenn Sie dies tun, scheint der Import zu arbeiten, aber Sie erhalten den folgenden Fehler, wenn der Spielplatz versucht, auszuführen:

Playground-Ausführung fehlgeschlagen: Fehler: Symbole konnte nicht suchen:

Ich habe eine Stunde verschwendet, um das herauszufinden.:)

Ich konnte es nicht in der Lage, mit einer der Antworten hierher zu arbeiten, also fing ich an, herumzuspielen und fand einen einfachen Weg, der für mich arbeitete, um eine schnelle Klasse in einen Spielplatz zu importieren.

Erstellen Sie einfach einen Spielplatz in Ihrem Projekt, es gibt ein Verzeichnis in der genannten "Quellen", ziehen Sie einfach eine Kopie der Swift-Klasse in diesen Ordner und den Spielplatz, auf den er Zugriff auf ihn hat.

zum Beispiel:

ENTERBildbeschreibung hier

Ich habe gerade Links zu all meinen Swift-Dateien in die Sources Ordner:

cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.swift .

Auf diese Weise werden Änderungen in Ihrer Quelldatei sofort auf Ihrem Spielplatz wirksam. Sehr schön gearbeitet.

Xcode 8.2, Schnelle 3.0.1, macOS Sierra

Alles, was Sie tun müssen - ist am Anfang schreiben:

generasacodicetagpre.

(Annahme des Spielplatzes in demselben Arbeitsbereich wie Framework / Projekt)

Wenn es nicht funktioniert:

    .
  1. Ihr Projekt neu erstellen

  2. Spielplatz neu erstellen und alle vom alten Spielplatz dort kopieren

  3. Es löst viele seltsame Fehler mit fehlgeschlagenen Inits und Importen von was auch immer!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top