web-dev-qa-db-fra.com

Est-ce que les terrains de jeux Swift peuvent voir d’autres fichiers source dans le même projet?

J'ai créé la classe personnalisée la plus simple dans un fichier Swift distinct de mon projet:

class Foo
{
    init()
    {
        println("I made a foo.")
    }
}

Puis, dans une aire de jeu du même projet, j’ai essayé

var x = Foo()

Xcode n'a pas semblé aimer cela et m'a dit que 'Foo' est un identifiant non résolu. Je suis un peu confus quant à la manière dont les terrains de jeu s'intègrent dans le reste de la structure du projet, car tout autre fichier Swift de mon projet peut résoudre le problème 'Foo' sans problème.

Comment faire en sorte que mon terrain de jeu puisse utiliser les classes personnalisées que je définis dans d'autres fichiers Swift de mon projet? J'ai essayé de nommer le module de produit pour la cible de construction et de l'importer dans la cour de récréation, sans succès: la cour de récréation ne reconnaît pas le nom du module de produit.

Merci d'avance pour l'aide. Je sais que c'est quelque chose de simple.

39
Maxwell Collard

Ils ne peuvent pas. Les terrains de jeux sont autonomes. Espérons que cela changera dans le futur.

Edit: À partir de Xcode 6.3, les terrains de jeu peuvent désormais contenir du code de support. Ils ne peuvent toujours pas voir d'autre code dans le même projet, mais du code peut être ajouté au dossier de support d'un Playground pouvant être utilisé à partir de la cour. Voir le blog Swift pour plus d'informations.

27
Lily Ballard

Il y a deux façons d'utiliser le code de votre projet dans un terrain de jeu

Dossier Sources du terrain de jeu

Oui, dans Xcode 6.3 Beta 3 (et dans l'avenir, j'espère):

Les aires de jeu sont désormais représentées dans Xcode sous la forme d'un ensemble avec un triangle d'affichage qui révèle les dossiers de ressources et de sources lorsque vous cliquez dessus. Ces dossiers contiennent du contenu supplémentaire facilement accessible depuis le code Swift principal de votre terrain de jeu. Pour voir ces dossiers, choisissez Affichage> Navigateurs> Afficher le navigateur de projet (ou appuyez simplement sur Commande-1).

Ouvrez un nouveau terrain de jeu et appuyez sur cmd + 1 pour afficher le volet de gauche, puis faites glisser les fichiers dans le dossier source à utiliser dans le terrain de jeu.

Remarque:

Les fichiers du dossier source sont compilés dans un framework, ce qui signifie que si vous souhaitez que les classes, les fonctions, etc. soient accessibles sur le terrain de jeu, ils doivent être explicitement marqués comme étant public.

public class VisibleClass {
}

class InvisibleClass {
}

Source: release blog

Compiler le projet dans le cadre

  1. Déplacer le projet vers l'espace de travail s'il ne l'est pas déjà. (Fichier -> Enregistrer en tant qu'espace de travail) fera l'affaire
  2. Ajouter une cible de cadre à votre projet
  3. Construire un cadre
  4. Assurez-vous que les fichiers auxquels vous souhaitez accéder sont ajoutés à votre cible de structure.
  5. Ajouter une aire de jeu à espace de travail (PAS le projet)
  6. Utilisez @testable import YourFrameworkName
  7. Code d'accès dans la cour de récréation

J'ai fait une écriture ici qui va un peu plus en détail si vous voulez vérifiez-le .

27
Logan

Oui. J'ai commencé en ajoutant simplement un fichier de classe dans le répertoire Sources . J'ai tout rendu public:

  • classe 
  • init 
  • membres

Après avoir beaucoup essayé, rien n'a fonctionné. Le XCode est tombé en panne et après sa réouverture, tout a fonctionné à merveille.

Using Sources/Dna.Swift in Playground

3
Uki D. Lucas

Dans Project Navigator de Xcode 10:

  1. Ajoutez le fichier de code source au dossier Sources du terrain de jeu.
  2. Faites glisser le fichier du dossier Sources du terrain de jeu vers l'emplacement souhaité dans le projet (vous devriez voir apparaître la petite icône "plus dans un cercle".
  3. Terminez le glissement, puis dans la boîte de dialogue Ajouter un fichier, décochez la case "Copier si nécessaire". 

Le fichier source "vit maintenant" dans le package de terrain de jeu; le projet s'y réfère (vous pouvez le vérifier avec l'inspecteur de fichier).

Je l'ai essayé dans l'autre sens: le fichier réside dans le dossier du projet avec une référence dans le dossier Sources du terrain de jeu, mais cela n'a pas fonctionné. Je me suis retrouvé avec deux copies du fichier de code source.

0
Verticon