Pregunta

Supongamos una configuración como esta:

  • Tienes un proyecto Xcode 6, donde implementaste tus propias clases (por ejemplo, MyView y MyViewController) con Objective-C y Swift.
  • Has agregado un patio de juegos a tu proyecto.

En Playground, es posible importar módulos (frameworks) como UIKit con el import palabra clave.¿Cómo se habilita el acceso a las otras clases del proyecto desde Playground?

Simplemente intentar acceder a las clases del proyecto directamente genera un mensaje de error:Uso del identificador no resuelto 'MyView'

¿Fue útil?

Solución

A partir de Xcode 6.0 Beta 5, ahora es posible importar sus propios marcos en un parque infantil. Esto proporciona una manera de compartir código entre sus aplicaciones y áreas de juegos, que pueden importar sus marcos. Para hacer esto:

  1. Su área de juegos debe estar en el mismo espacio de trabajo que el proyecto que produce su marco. Su espacio de trabajo debe contener un objetivo que produce el marco, en lugar de usar un marco previo.

  2. Debe haber construido su marco. Si es un marco de iOS, debe construirse para un destino de ejecución de 64 bits (por ejemplo, iPhone 5S), y debe construirse para el simulador.

  3. Debe tener un esquema activo que construye al menos un objetivo (la ubicación de la construcción de TAGET se utilizará en la ruta de búsqueda del marco para el área de juegos).

  4. La preferencia de "Ubicación de construcción" (en la configuración avanzada de "ubicaciones" de XCode) no debe establecerse en "Legacy".

  5. Si su marco no es un marco rápido, la configuración de compilación "define el módulo" debe configurarse en "Sí".

  6. Debe agregar una declaración de importación a su área de juegos para el marco.

  7. Una vez que se cumplan todas estas condiciones, la importación de su marco funcionará en un parque infantil.

    En Xcode 7 introdujimos otro mecanismo que puede usar para importar sus propias clases como fuente, en lugar de importar un marco; Puede leer sobre este soporte de "fuentes auxiliares" en http://help.apple. com / xcode / Mac / 8.0 / # / Devfa5bea3af

Otros consejos

De hecho, logré hacer referencia a otros archivos Swift en el proyecto actual haciendo esto:

  • Cree un patio de juegos vacío y colóquelo en algún lugar debajo de su proyecto.
  • Abre el YourPlayground.playground paquete (sí, es un directorio paquete =) en Terminal.
  • Editar contents.xcplayground por ejemplo con vi y agrega otra sección como esta:
<?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>
  • Rebautizar section-1.swift a section-2.swift (si creaste el Playground desde cero, debería haber un ejemplo section-1.swift en tu paquete)
  • Agrega un enlace duro (el enlace simbólico no parece funcionar) nombrado section-1.swift que apuntará fuera del paquete a su archivo de clase Swift como:
ln ../../Classes/MyView.swift section-1.swift
  • Cierra Xcode y abre Playground nuevamente.
  • Ahora debería haber dos secciones, una con el contenido de su archivo de clase Swift y la otra con el contenido de ejemplo que obtuvo al crear Playground desde cero.

De esta manera puedo ejecutar código que se encuentra fuera de Playground, pero Xcode parece fallar con más frecuencia cuando lo hago de esta manera.

Editar:

A partir de Xcode 6 beta 5, ahora puedes consultar archivos de proyecto, como indica Rick Ballard en su respuesta.

Desde la Beta 5 de Xcode 6 es posible importar tu código si está en un framework.Lo que debe hacer es crear un marco de destino, agregar los archivos Swift allí y en su patio de juegos hacerlo.

import ModuleName

Puede buscar el nombre del módulo en la configuración de compilación.Suele ser el mismo que el nombre del objetivo.

Recuerda hacer el código que deseas ver public.Deberá crear el proyecto antes de que los cambios estén disponibles en el patio de juegos.(También deberá editar el área de juegos para activar la nueva ejecución).

Importante

¡No le dé al archivo del patio de juegos el mismo nombre que el objetivo!Si lo hace, la importación parece funcionar, pero obtendrá el siguiente error cuando el patio de juegos intente ejecutarse:

Error en la ejecución del patio de juegos:error:No se pudieron buscar símbolos:

Perdí una hora dándome cuenta de eso.:)

No pude hacerlo trabajar usando ninguna de las respuestas aquí, así que comencé a jugar y encontré una forma sencilla que me funcionó para importar una clase rápida en un patio de recreo.

Simplemente cree un área de juegos en su proyecto, hay un directorio dentro de ella llamado 'Sources', simplemente arrastre una copia de la clase SWIFT a esa carpeta y el área de juegos tendrá acceso a él.

Por ejemplo:

EnterDescripción de la imagen aquí

Acabo de poner enlaces a todos mis archivos Swift en el Sources carpeta:

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

De esta manera, los cambios en su archivo fuente entrarán en vigor en su patio de juegos de inmediato. Funcionó muy bien.

Xcode 8.2, Swift 3.0.1, macOS Sierra

Todo lo que tiene que hacer: está escribiendo al principio:

import ModuleName

(Suponiendo que su área de juegos se coloca en el mismo espacio de trabajo que marco / proyecto)

Si no funciona:

  1. Reconstruir su proyecto

  2. recrear playground y copiar todo desde el patio de recreo viejo

  3. resuelve muchos errores extraños con las importaciones de init y importaciones fallidas de lo que sea!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top