una respuestas representa qué que objective móviles moviles híbrida examen desarrollo curso apps app aplicaciones xcode swift

xcode - respuestas - "Uso de tipo no declarado" en Swift, aunque el tipo es interno y existe en el mismo módulo



que representa un viewcontroller (22)

Al igual que otros, era un código no relacionado lo que causaba que el @testable funcionara correctamente.

En mi objetivo de prueba había un archivo de encabezado Objective-C que tenía

@import ModuleUnderTest;

@testable esta línea (porque la importación en realidad era innecesaria) y milagrosamente @testable trabajar de nuevo.

Solo pude rastrear esto, pero quité todo de mi proyecto y lo agregué poco a poco hasta que falló. Eventualmente encontré la línea de problema del código.

Tengo un tipo en mi módulo:

import Cocoa class ColoredDotView : NSView { ... }

Se usa en varias clases diferentes sin problema:

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''

Que no entiendo Es el primer error de compilación en el archivo, y el resto de los errores son todos 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, sin éxito. ¿Qué errores potenciales pueden causar un error de compilador de undeclared type en Swift?


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 son parte de la aplicación estén disponibles para la prueba.


En caso de que alguien encuentre un problema similar pero el arreglo Compile Sources no resuelve el problema, reiniciar Xcode puede (funcionó para mí). Mi versión de Xcode es la Version 6.1 (6A1052d) .


En el menú XCode Product-> Clean y luego Product-> Build funcionó para mí. Encontré este problema cuando agregué ViewController nuevo a mi proyecto en un nuevo Grupo / Carpeta.


En mi aplicación, tengo un delegado de aplicación y otras clases a las que las pruebas deben acceder como públicas. Como se describe aquí , luego importo mi aplicación a mis pruebas.

Cuando recientemente creé dos nuevas clases, sus objetivos de prueba fueron las partes principal y de prueba. Eliminarlos de su membresía de las pruebas resolvió el problema.


En mi caso fue un error hecho por mí. Agregué un nuevo archivo como "OS X> Fuente> Clase Cocoa", en lugar de "iOS> Fuente> Clase Cocoa Touch".


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 convertir eso a ''UTF-8'', problema resuelto.

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 veloz.

Sin captura de pantalla de codificación explícita

Captura de pantalla de UTF-8


En mi caso, esto fue causado por el nombre de una subclase que se usa en la siguiente línea como nombre de variable con un tipo diferente:

var binGlow: pipGlow = pipGlow(style: "Bin") var pipGlow: PipGlowSprite = PipGlowSprite()

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. ¡Este no solo era un mal estilo de codificación, sino que al parecer también un absoluto no-no! Una vez que cambio la segunda línea a:

var binGlow: pipGlow = pipGlow(style: "Bin") var pipGlowSprite: PipGlowSprite = PipGlowSprite()

Ya no recibí el error. ¡Espero que esto ayude a alguien!


En mi caso, me encontré con este error cuando mi objetivo de prueba no tenía algunos archivos rápidos que el objetivo de compilación de mi aplicación tenía en las fuentes de compilación. Era muy confuso porque el "tipo no declarado" se usaba en muchos otros lugares sin problemas, y el error parecía vago. Entonces, la solución era, por supuesto, agregar el archivo que contenía el "tipo no declarado" al objetivo de prueba.


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.

Los problemas fueron algo como esto:

func moveBlob(**blob** : blob){ ...code }

La parte en negrita estaba causando el error de tipo no declarado


Esto podría ayudar a alguien.

Creé un nuevo proyecto de prueba con Core Data llamado "CoreData". En breve, tengo "Uso del tipo no declarado" para NSManagedObjectContext y otras clases de datos principales. Después de varios intentos de importar, agregar a las fases de compilación, etc., borré el proyecto y comencé uno nuevo llamado "TestingCoreData" y todo funcionó bien.

No nombre (pruebe) Proyectos como el nombre de las Clases


Esto también puede suceder si accidentalmente escribe en mayúscula el nombre del parámetro y lo llama igual que el objeto.

class func didRecieveData(BlockItems: [BlockItems])


Esto también puede suceder si tiene una función con el mismo nombre que un tipo de objeto en su firma. Por ejemplo:

class func Player(playerObj: Player)

hará que el compilador se confunda (y con razón) ya que el compilador primero verá localmente dentro del archivo antes de mirar otros archivos. Entonces mira "Player" en la firma y piensa que ese no es un objeto en este ámbito, sino una función, entonces algo está mal.

Quizás esta es una buena razón por la cual no debería capitalizar las funciones de clase. :)


Esto ya ha sido respondido por @Craig Otis, pero el problema se debe a que las clases en cuestión no pertenecen a los mismos objetivos, generalmente falta el objetivo de la 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


Intenté muchas de las soluciones ofrecidas aquí, pero finalmente eliminé el archivo y lo volví a crear, y Xcode se apaciguó: /


La causa para mí fue un nombre de función que comenzó con los mismos caracteres que un tipo:

@IBOutlet weak var tableView: CustomTableView!

y en la implementación tenía una función que comenzaba con CustomTableView

func CustomTableView(tableView: CustomTableView, dataForRow row: Int) -> NSData {...}

La solución era cambiar la firma de la función para que no comenzara con los mismos caracteres que el tipo (CustomTableView), por ejemplo:

func dataForRow(row: Int, tableView: CustomTableView) -> NSData {...}

Este fue un mensaje de error muy engañoso para la causa real en mi caso.


Recibí este mensaje de error en Xcode 8 mientras refactorizaba el código en un marco de trabajo, resulta que olvidé declarar la clase en el marco como public


Tal vez haya agregado clases con algunas "FirstNameClass" y luego cambie manualmente a "ColoredDotView". Intente copiar el contenido de la clase "ColoredDotView" al portapapeles, elimine "ColoredDotView" del proyecto y agregue agin.

Esta identificación me solucionó un problema similar.


Tuve exactamente el mismo problema. Algunos de los archivos en mi marco no eran alcanzables desde otras clases dentro del mismo módulo.

Por algún motivo, 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 forma parte de las fuentes de compilación, debe agregarlas tocando el + y seleccionándolas en la ventana emergente.

También asegúrese de que el archivo sea parte del objetivo del marco. (Se debe marcar la pequeña casilla en la captura de pantalla siguiente)


Tuve un error con el tipo Int , debido a la referencia a un case local en mi enum llamado .Int

func foo() { switch self { case .Int(var info): // ..... some other code } }

Hubo error aquí someFuncWithInt(parameter: Int)

Se someFuncWithInt(parameter: Swift.Int) con someFuncWithInt(parameter: Swift.Int)


Uf, finalmente diagnostica esto. De alguna manera , el archivo EditTaskPopoverController.swift encontraba en dos fases de compilación diferentes.

Estaba en Compile Sources correctamente, con todos los otros archivos de Swift, pero también fue, por alguna extraña razón, también en la fase Copy Bundle Resources , junto con todos mis XIB y recursos de imágenes.

No tengo idea de cómo llegó allí, pero eliminarlo de la fase de construcción adicional resolvió el problema.


como otros mencionaron bien y en este hilo

uso de archivos rápidos innecesarios en "copiar recursos del paquete"