Supposons une configuration comme celle-ci:
Dans le Playground, il est possible d'importer des modules (frameworks) tels que UIKit
avec le mot clé import
. Comment autorisez-vous l'accès aux autres classes du projet à partir du Playground?
Le fait d’essayer d’accéder directement aux classes de projet entraîne un message d’erreur: tilisation de l’identificateur non résolu "MyView"
À partir de Xcode 6.0 Bêta 5, il est maintenant possible d'importer vos propres cadres dans un terrain de jeu. Cela permet de partager le code entre vos applications et vos terrains de jeu, ce qui permet d'importer vos frameworks. Pour faire ça:
Votre terrain de jeu doit se trouver dans le même espace de travail que le projet qui produit votre cadre. Votre espace de travail doit contenir une cible qui produit le cadre, au lieu d'utiliser un cadre pré-construit.
Vous devez avoir déjà construit votre framework. S'il s'agit d'un framework iOS, il doit être créé pour une destination d'exécution 64 bits (par exemple, l'iPhone 5) et pour le simulateur.
Vous devez avoir un schéma actif qui construit au moins une cible (l'emplacement de construction de cette cible sera utilisé dans le chemin de recherche du cadre pour le terrain de jeu).
Votre préférence "Construire l'emplacement" (dans les paramètres avancés "Emplacements" de Xcode) ne doit pas être définie sur "Héritage".
Si votre structure n'est pas une structure Swift, le paramètre de construction "Defines Module" doit être défini sur "Oui".
Vous devez ajouter une déclaration d'importation à votre terrain de jeu pour le cadre.
Une fois toutes ces conditions remplies, l’importation de votre cadre fonctionnera dans une cour de récréation.
Dans Xcode 7, nous avons introduit un autre mécanisme que vous pouvez utiliser pour importer vos propres classes en tant que source, au lieu d'importer une structure. Pour en savoir plus sur le support "Sources auxiliaires", consultez la page http://help.Apple.com/xcode/mac/8.0/#/devfa5bea3af
En fait, j'ai réussi à faire référence à d'autres fichiers Swift dans le projet actuel:
YourPlayground.playground
bundle (oui, c’est un bundle = répertoire) dans Terminal.contents.xcplayground
par exemple avec vi
et ajoutez une autre section comme celle-ci:<?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>
section-1.Swift
à section-2.Swift
_ (si vous avez créé le Playground à partir de rien, il devrait y avoir un exemple section-1.Swift
dans votre paquet)section-1.Swift
qui pointe vers l’extérieur du paquet vers votre fichier de classe Swift) comme:ln ../../Classes/MyView.Swift section-1.Swift
De cette façon, je peux exécuter du code hors du Playground, mais Xcode semble planter plus souvent en procédant ainsi.
Modifier:
Depuis Xcode 6 beta 5, vous pouvez maintenant faire référence à des fichiers de projet, comme l’indique Rick Ballard dans son réponse .
Depuis la version bêta 5 de Xcode 6, il est possible d'importer votre code s'il se trouve dans un cadre. Ce que vous devez faire est de créer une cible pour le framework, ajoutez les fichiers Swift présents sur votre
import ModuleName
Vous pouvez rechercher le nom du module dans les paramètres de construction. C'est généralement le même que le nom de la cible.
N'oubliez pas de créer le code que vous voulez voir public
. Vous devrez créer le projet avant que des modifications ne soient disponibles dans la cour de récréation. (Vous devrez également modifier le terrain de jeu pour déclencher une nouvelle exécution.)
Ne donnez pas au même fichier de jeu le même nom que la cible! Si vous le faites, l'importation semble fonctionner, mais vous obtiendrez l'erreur suivante lorsque le terrain de jeu tente de s'exécuter:
L'exécution du terrain de jeu a échoué: erreur: impossible de rechercher les symboles:
J'ai perdu une heure à comprendre cela. :)
Je ne pouvais pas le faire fonctionner en utilisant l'une des réponses ici, alors j'ai commencé à jouer et trouvé un moyen simple qui a fonctionné pour moi d'importer une classe Swift dans un terrain de jeu.
Créez simplement un terrain de jeu dans votre projet. Un répertoire à l'intérieur du projet appelé "sources" suffit de faire glisser une copie de la classe Swift) dans ce dossier. Le terrain de jeu y aura alors accès.
Par exemple:
Je viens de mettre des liens vers tous mes Swift fichiers dans le dossier Sources
:
cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.Swift .
De cette façon, les changements dans votre fichier source prendront effet immédiatement dans votre terrain de jeu. Très bien travaillé.
Xcode 8.2, Swift 3.0.1, macOS Sierra