swift swift-playground xcode6.3

swift - Los parques infantiles de Xcode no pueden acceder a archivos rápidos en la carpeta Fuentes



swift-playground xcode6.3 (3)

Acabo de actualizar a Xcode 6.3 y me ofrecieron algo nuevo en Playgrounds. Si crea un nuevo campo de juegos y abre el navegador de proyectos, verá una carpeta de Fuentes y dentro de ella hay un archivo "SupportCode.swift". En la parte superior de ese archivo se lee

Este archivo (y todos los demás archivos fuente de Swift en el directorio de Fuentes de este patio de recreo) se precompilarán en un marco que estará automáticamente disponible para .playground.

Intenté poner una función allí y no está disponible para mi patio de recreo. ¿Qué estoy haciendo mal? ¿Tengo que compilar manualmente el archivo SupportCode.swift manualmente? ¿Cómo?


Como se mencionó cuando crea archivos .swift en la carpeta Fuente, están automáticamente disponibles para su código de área de juegos. Para controlar el acceso a diferentes partes de este archivo, puede usar modificadores de nivel de acceso que son: public , internal y private .

De acuerdo con el control de acceso del lenguaje de programación Swift

El nivel de acceso predeterminado en la mayoría de los casos es internal accesible desde el interior del módulo, pero no desde el exterior.

En otras palabras, si declara una clase sin modificador de acceso, puede acceder a ella desde otro archivo en la carpeta Fuente pero NO en el archivo principal de su área de juegos. Por otro lado, si declara una clase con un modificador público, puede acceder a ella en ambos casos.

para un uso práctico: hagamos una implementación Singleton Primero: creo un nuevo archivo en la carpeta de origen llamado ''Singy.swift'' con el siguiente código:

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! } }

Segundo: desde mi patio de recreo

var s1 = Singy.getSingy() var s2 = Singy.getSingy() s1.name = "One" print(s2.name)

Tanto s1 como s2 referencia a la misma instancia, pero se creó solo dentro de la clase


Debe agregar el atributo de acceso público a sus clases, métodos y propiedades en la carpeta de origen para hacerlos accesibles desde el archivo principal del patio de juegos, ya que el compilador los trató como un módulo separado


Los parques infantiles son buenos para ejecutar pruebas. Coloque todo su código en el directorio de Sources y tenga una clase de ''prueba'' accesible al público, para cada prueba. Luego ejecute las pruebas de acceso público desde el patio de recreo.

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" } }