Tengo un tipo en mi módulo:
import Cocoa
class ColoredDotView : NSView {
...
}
Se utiliza en varias clases diferentes sin problemas:
class EditSubjectPopoverController : NSObject {
@IBOutlet internal var subjectColorDotView : ColoredDotView!
...
}
Pero por alguna razón , cuando lo uso en una clase específica , tengo errores de compilación en el tipo:
class EditTaskPopoverController : NSObject {
@IBOutlet internal var lowPriorityDotView : ColoredDotView! // Error here
@IBOutlet internal var medPriorityDotView : ColoredDotView! // And here...
@IBOutlet internal var highPriorityDotView : ColoredDotView! // And here...
...
}
El error de compilación es:
EditTaskPopoverController.swift: 15: 49: Uso del tipo no declarado 'ColoredDotView'
Lo cual no entiendo. Es el primer error de compilación en el archivo, y el resto de los errores son sintomáticos del primero. Además, no hay otros archivos con errores de compilación. No entiendo por qué el tipo no está declarado, ya que el archivo está en el mismo módulo:
Intenté limpiar el proyecto, limpiar la carpeta de compilación y reiniciar Xcode, pero fue en vano. ¿Qué posibles errores pueden causar un undeclared type
error del compilador en Swift?
var
declaraciones y llego a una compilación pasajera. Luego agrego una de las declaraciones en la parte superior, y el error vuelve inmediatamente: imgur.com/VUUBK2KRespuestas:
Para mí, encontré este error cuando mi objetivo de prueba no tenía algunos archivos rápidos que mi objetivo de compilación de aplicaciones tenía en las fuentes de compilación. Fue muy confuso porque el 'tipo no declarado' se estaba utilizando en muchos otros lugares sin ningún problema, y el error parecía vago. Entonces, la solución era, por supuesto, agregar el archivo que contiene el 'tipo no declarado' al objetivo de la prueba.
fuente
Esto ya ha sido respondido por @Craig Otis, pero el problema se produce cuando las clases en cuestión no pertenecen a los mismos objetivos, generalmente falta el objetivo de prueba. Solo asegúrese de que las siguientes casillas estén marcadas.
Editar
Para ver la membresía objetivo. Seleccione su archivo y luego abra el inspector de archivos (⌥ + ⌘ + 1) [ opción ] + [ comando ] + 1
fuente
Uff, finalmente diagnosticó esto. De alguna manera , el archivo Swift ofensivo
EditTaskPopoverController.swift
estaba en dos fases de compilación diferentes.Estaba
Compile Sources
correctamente, con todos los demás archivos Swift, pero también , por alguna razón muy extraña, también en laCopy Bundle Resources
fase, junto con todos mis recursos XIB y de imagen.No tengo idea de cómo llegó allí, pero eliminarlo de la fase de construcción adicional resolvió el problema.
fuente
En el menú XCode Producto-> Limpiar y luego Producto-> Construir funcionó para mí. Encontré este problema cuando agregué un nuevo ViewController a mi proyecto en un nuevo Grupo / Carpeta.
fuente
Tuve exactamente el mismo problema. Algunos de los archivos en mi marco no eran accesibles desde otras clases dentro del mismo módulo.
Por alguna razón, los archivos que se habían agregado al marco en Xcode no formaban parte de las fuentes de compilación. Si su archivo Swift no es parte de las fuentes de compilación, debe agregarlos tocando el + y seleccionándolos en la ventana emergente.
También asegúrese de que el archivo sea parte del objetivo del marco. (La pequeña casilla en la captura de pantalla a continuación debe estar marcada)
fuente
La causa para mí fue un nombre de función que comenzó con los mismos caracteres que un tipo:
y en la implementación tenía una función que comenzaba con CustomTableView
La solución fue cambiar la firma de la función para que no comenzara con los mismos caracteres que el tipo (CustomTableView), por ejemplo:
Este fue un mensaje de error muy engañoso para la causa real en mi caso.
fuente
En caso de que alguien encuentre un problema similar pero la solución Compile Sources no resuelva el problema, reiniciar Xcode puede (funcionó para mí). Mi versión de Xcode es
Version 6.1 (6A1052d)
.fuente
En mi aplicación tengo delegado de aplicaciones y otras clases a las que las pruebas deben acceder como públicas. Como se describe aquí , luego importo mi aplicación en mis pruebas.
Cuando recientemente creé dos nuevas clases, sus objetivos de prueba eran las partes principales y de prueba. Eliminarlos de su membresía de las pruebas resolvió el problema.
fuente
En mi caso, las fuentes de compilación de TestTarget tenían archivos del objetivo principal .
Ref :
¿Por qué pasa esto?
Esto sucede porque verificamos la asociación TestTarget al crear el archivo
O marcando manualmente esta opción del inspector.
Ref :
¿Cómo lo resolví?
fuente
fuente
Probé muchas de las soluciones ofrecidas aquí, pero finalmente eliminé el archivo y lo volví a crear, y Xcode se aplacó: /
fuente
Esto también puede ocurrir si accidentalmente escribe en mayúscula el nombre del parámetro y lo llama igual que el objeto.
fuente
Esto podría ayudar a alguien.
He creado un nuevo proyecto de prueba con Core Data llamado "CoreData". En breve obtuve "Uso de tipo no declarado" para NSManagedObjectContext y otras clases de Core Data. Después de varios intentos de importar, agregar a las fases de compilación, etc. Eliminé el proyecto y comencé uno nuevo llamado "TestingCoreData" y todo funcionó bien.
No nombrar (probar) proyectos como el nombre de las clases
fuente
Esto también puede suceder si tiene una función con el mismo nombre que un tipo de objeto en su firma. Por ejemplo:
hará que el compilador se confunda (y con razón) ya que el compilador primero buscará localmente dentro del archivo antes de mirar otros archivos. Por lo tanto, mira "Player" en la firma y piensa que no es un objeto en este ámbito, sino una función, por lo que algo está mal.
Quizás esta sea una buena razón por la que no debería capitalizar las funciones de clase. :)
fuente
Recibí este mensaje de error en Xcode 8 al refactorizar el código en un marco, resulta que olvidé declarar la clase en el marco como
public
fuente
Tal vez haya agregado clase con alguna "FirstNameClass" y luego cambie el nombre manualmente a "ColoredDotView". Intente copiar el contenido de la clase "ColoredDotView" al portapapeles, elimine "ColoredDotView" del proyecto y agregue agin.
Esta identificación solucionó un problema similar de mi parte.
fuente
En mi caso fue un error cometido por mí. Agregué un nuevo archivo como "OS X> Fuente> Cocoa Class", en lugar de "iOS> Fuente> Cocoa Touch Class".
fuente
En mi caso, esto fue causado por el uso de un nombre de subclase en la siguiente línea como nombre de variable con un tipo diferente:
Observe que en la línea 1, pipGlow es el nombre de la subclase (de SKShapeNode), pero en la línea dos, estaba usando pipGlow como nombre de variable. ¡Esto no solo era un mal estilo de codificación, sino que aparentemente también era un no-no absoluto! Una vez que cambie la segunda línea a:
Ya no recibí el error. ¡Espero que esto ayude a alguien!
fuente
Al probar el código Swift que pertenece a la aplicación, primero asegúrese de que el objetivo de la prueba esté creando la aplicación como una dependencia. Luego, en su prueba, importe la aplicación como un módulo. Por ejemplo:
@testable import MyApplication
Esto hará que los objetos Swift que forman parte de la aplicación estén disponibles para la prueba.
fuente
En mi caso, eso fue causado por la codificación de texto de los archivos rápidos. Un archivo mostró 'Sin codificación explícita', y después de convertirlo a 'UTF-8', el problema se resolvió.
Y la razón por la cual la codificación de texto del archivo no es explícita es que copié todo el código de otro archivo rápido.
Captura de pantalla sin codificación explícita
Captura de pantalla de UTF-8
fuente
Limpiar el proyecto resolvió mi problema.
Pasos: Producto -> Limpiar (o Shift + Cmd + K)
fuente
En mi caso, quería agregar un método con un objeto rápido personalizado como parámetro de tipo, y el nombre que le di a la variable en el parámetro era exactamente el mismo que el nombre de la clase de objeto personalizado
El problema era algo como esto:
La parte en negrita estaba causando el error de tipo no declarado
fuente
como otros mencionaron bien y en este hilo
uso de archivos rápidos innecesarios en "recursos de paquete de copia"
fuente
Al igual que otros, fue un código no relacionado que estaba causando el
@testable
mal funcionamiento.En mi objetivo de prueba había un archivo de encabezado Objective-C que tenía
@import ModuleUnderTest;
Eliminé esta línea (porque la importación era realmente innecesaria) y milagrosamente
@testable
comencé a trabajar nuevamente.Solo pude rastrear esto, pero eliminé todo de mi proyecto y lo volví a agregar poco a poco hasta que falló. Finalmente encontré la línea de código problemática.
fuente
si se accede a ella desde diferentes
module
oTarget
a continuación, sólo se necesitapublic
quefuente
En caso de que alguien cometa el mismo error tonto que hice ...
Estaba recibiendo este error porque al renombrar mi archivo fuente, accidentalmente eliminé el
.
archivo del nombre del archivo, por lo que el compilador trató el archivo como un archivo de texto sin formato y no como fuente para compilar.así que quise cambiar el nombre del archivo
MyProtocol.swift
pero accidentalmente lo llaméMyProtocolswift
Es un simple error, pero no era obvio que esto era lo que estaba pasando.
fuente
No agregar la delimitación de importación correcta también puede ser una falta obvia. Para mí, simplemente había omitido importar PriorityUIKit.
fuente
Mi situación es que arrastro un nuevo archivo XXView.swift al proyecto. Y declare que un tipo de Vista es XXView y luego el error "uso de tipo no declarado ...".
Solo trato de agregar mi XXView.swift al objetivo de prueba que resolvió el error. Pero no quería que mi clase de IU participara en el objetivo de la prueba.
Finalmente, encontré mi ViewController ya en el objetivo de prueba, lo que no debería suceder. (Creo que debido a que creo el VC mediante una plantilla xctemplate, se incluirá automáticamente en el objetivo de prueba)
Elimino el controlador de vista del objetivo de prueba, y luego mi XXView ya no es necesario agregar al objetivo de prueba.
Conclusión: asegúrese de que todos sus archivos relacionados también desmarquen el objetivo de prueba.
fuente
Después de pasar una hora en este error, descubrí que el archivo del módulo está duplicado. elimine el archivo adicional y presione shift + cmd + k para limpiar y el error desaparecerá.
fuente
En mi caso, el problema era con un nuevo
class
no reconocido. Resolví el problema eliminando la clase y volviéndola a agregar, pero esta vez marcando laWatch App Extension
opción al crear la nueva clase.Tenga en cuenta que tengo una extensión de aplicación Watch en mi aplicación.
fuente
Target
.