Je viens de passer à Xcode 6.3 et ils ont offert quelque chose de nouveau aux Playgrounds. Si vous créez une nouvelle aire de jeux et que vous ouvrez le navigateur de projet, vous verrez un dossier Sources et à l'intérieur de celui-ci se trouve un fichier "SupportCode.Swift". En haut de ce fichier, il lit
Ce fichier (et tous les autres Swift dans le répertoire Sources de ce terrain de jeu) seront précompilés dans un framework qui est automatiquement mis à la disposition de .playground.
J'ai essayé d'y mettre une fonction et elle n'est pas disponible sur mon terrain de jeu. Qu'est-ce que je fais mal? Dois-je compiler manuellement le fichier SupportCode.Swift manuellement? Comment?
Vous devez ajouter public attribut d'accès à vos classes, méthodes et propriétés dans le dossier source pour les rendre accessibles à partir du fichier principal de la cour de récréation car ils sont traités comme un module séparé par le compilateur
Les terrains de jeux sont bons pour exécuter des tests. Placez tout votre code dans le répertoire Sources
et disposez d'une classe "test" accessible au public, pour chaque test. Exécutez ensuite les tests accessibles au public depuis la cour de récréation.
playground
Test1.run()
Testx.run()
...
Sources/Test1.Swift
public class Test1 {
public static func run() {
let my_class = MyClass()
let result = my_class.do_something()
print(result)
}
}
Sources/MyClass.Swift
class MyClass {
func do_something() -> String {
return "lol"
}
}
Comme mentionné lorsque vous créez des fichiers .Swift dans le dossier Source, ils sont automatiquement disponibles pour votre code de terrain de jeu. Pour contrôler l'accès à différentes parties de ce fichier, vous pouvez utiliser des modificateurs de niveau d'accès qui sont: public
, internal
& private
.
Selon contrôle d'accès au langage de programmation Swift
Le niveau d'accès par défaut dans la plupart des cas est internal
qui est accessible à l'intérieur du module, mais pas à l'extérieur.
En d'autres termes, si vous déclarez une classe sans modificateur d'accès, vous pouvez y accéder à partir d'un autre fichier dans le dossier Source mais PAS dans le fichier principal de votre aire de jeux. d'autre part, si vous déclarez une classe avec un modificateur public, vous pouvez y accéder dans les deux cas.
pour une utilisation pratique: faisons une implémentation Singleton Premièrement: je crée un nouveau fichier dans le dossier Source nommé 'Singy.Swift' avec le code suivant:
public class Singy {
public var name = ""
private static var instance: Singy?
private init() {}
public static func getSingy() -> Singy {
if Singy.instance == nil {
Singy.instance = Singy()
}
return Singy.instance!
}
}
Deuxièmement: depuis mon terrain de jeu
var s1 = Singy.getSingy()
var s2 = Singy.getSingy()
s1.name = "One"
print(s2.name)
Tous les deux s1
et s2
référence la même instance, mais elle n'a été créée que dans la classe