'Uso de identificador no resuelto' en Swift


93

Así que he estado creando una aplicación y todo ha funcionado muy bien. Pero hoy hice una nueva clase como de costumbre y por alguna razón en esta clase no puedo acceder a la variable Pública / Global desde otras clases. Todas las otras clases pueden, pero ahora que intento hacer una nueva clase, no puedo. ¿Cómo se arreglaría esto?

Estoy usando Swift y Xcode 6.

Clase obrera:

import UIKit
import Foundation
import Parse
import CoreData

var signedIn = true

class ViewController: UIViewController {

Nueva clase:

import UIKit

class NewClass: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        signedIn = false

}

Pero en signedIn = false

Me sale el error:

uso del identificador no resuelto "firmado"


y sí, he eliminado y recreado esta clase varias veces
Apple Geek

Muestra tu código, tanto funcionando como no.
Mié

¿Puede especificar la versión de XCode / Swift que está usando (si es beta o no)?
lchamp

@Ichamp Xcode 6.1 no beta.
Apple Geek

1
¿Es este tu código completo? debido a su sangría, parece que le falta un corchete }al final de suviewDidLoad()
Wez

Respuestas:


296

Un posible problema es que su nueva clase tiene un Objetivo diferente o Objetivos diferentes de la otra.

Por ejemplo, podría tener un objetivo de prueba mientras que el otro no. Para este caso específico, debe incluir todas sus clases en el objetivo de prueba o ninguna de ellas.

Objetivos


Si la clase está en un destino diferente, asegúrese de importarla en la parte superior de su archivo rápido
Medhi

2
jeje, eso fue un problema. Olvidé configurar un objetivo para la clase. Tnx :)
tBug

Oh hombre, pasé un par de horas para resolver este. Un mensaje de error tan estúpido. ¡Incluso el error de sintaxis es mejor!
probado el

sí ... ¡¡no se fijó en un objetivo para un proyecto de prueba !! gracias
reidisaki

1
El mío estaba dentro, pero simplemente desmarqué y luego volví a verificar, lo que solucionó esto Y mi autocompletar / intellisense regresó.
Stephen J

7

El 'uso de identificador no resuelto' en Swift también ocurre cuando se olvida de importar una biblioteca. Por ejemplo, tengo el error: ingrese la descripción de la imagen aquí

En el que olvidé el UIKit

importar UIKit


1
importar AVFoundation
Jenita _Alice4Real

6

Una vez tuve este problema después de cambiar el nombre de un archivo. Cambié el nombre del archivo desde dentro de Xcode, pero luego Xcode no pudo encontrar la función en el archivo. Incluso una reconstrucción limpia no solucionó el problema, pero cerrar y luego volver a abrir el proyecto hizo que la construcción funcionara.


Esto también funciona para cambiar la ubicación de un archivo
Logan George

exactamente a la derecha, eliminé las referencias de los archivos y luego los agregué nuevamente. y todo funcionó
Hamed Nova

4

A veces, el compilador se confunde con la sintaxis de su clase. Esto sucede mucho si pega el código fuente desde otro lugar.

Intente reducir el archivo de origen "no resuelto" al mínimo, limpiando y construyendo. Una vez que se haya construido correctamente, vuelva a agregar toda la complejidad a su clase.

Esto me ha hecho desaparecer cuando reiniciar Xcode no funcionó.


4

Otro lugar en el que he visto este error es cuando su proyecto tiene varios objetivos Y varios encabezados de puente . Si es una clase compartida, asegúrese de agregar el recurso a todos los encabezados de puente.

Un buen consejo es mirar en el panel izquierdo del Navegador de problemas; el objeto raíz mostrará el objetivo que está emitiendo la denuncia.


3

Para mí, este error ocurrió porque estaba intentando llamar a una función anidada . Lo único que tenía que hacer para que lo arreglen era llevar la función a cabo a un ámbito donde era visible.


Por "llevar la función a un ámbito donde sea visible", ¿te refieres a marcarla como pública?
Barry Jones

No. Simplemente mover / arrastrar la función a un alcance diferente, es decir, bajo el alcance de la clase
Cariño,

3

En mi caso, tenía un archivo Object-C que también estaba en la misma Membresía de destino. Lo arreglé agregando un #import "YourObjectCFileHeader.h"archivo interiorBridging-Header.h


1

Porque no lo has declarado. Si desea utilizar una variable de otra clase, debe utilizar

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var DestViewController : ViewController = segue.destinationViewController as ViewController
    DestViewController.signedIn = false
}

Tienes que poner este código al final del código NewClass


sí, pero he usado otras clases y han funcionado bien sin eso, es solo cuando hago esta nueva clase.
Apple Geek

2
Esto no funcionará, tiene la variableignedIn declarada en el ámbito global, no dentro de su clase.
Sam

1

Tu NewClasshereda UIViewController. Declaraste signedInen ViewController. Si desea NewClasspoder identificar esa variable, tendrá que declararla en una clase de la que NewClasshereda.


1

Recibí este error para Mantle Framework en mi proyecto Objective-Swift. Lo que intenté es

  1. Compruebe si la importación está en el archivo Bridging-Header.h
  2. Cambie la Membresía de destino para Framework en el archivo Mantle.h como se muestra en la siguiente captura de pantalla.

Alterne entre Membresía Privada primero construya el proyecto, termine con errores. Luego, cree el proyecto con Membresía pública para todos los marcos que aparecieron para el archivo Mantle.h , debe tener éxito.

Es solo un error de construcción con múltiples marcos en el proyecto Objective-C Swift.

ingrese la descripción de la imagen aquí


0

Si se trata de una clase que creó, asegúrese de que la clase no esté anidada.

Fe

A. rápido

class A {

   class ARelated {

   }
}

la llamada var b = ARelated()dará 'Uso de identificador no resuelto: ARelated'.

Tu también puedes:

1) separe las clases si lo desea en el mismo archivo:

A. rápido

class A {

}

class ARelated {

}

2) Mantenga su misma estructura y use la clase adjunta para llegar a la subclase:

var b = A.ARelated


0

Cometí un error estúpido. Olvidé mencionar la clase como pública o abierta mientras actualizaba el código en el espacio de trabajo de cocoapod.

Verifique si el accesorio está trabajando en un espacio de trabajo separado.


0

Olvidó declarar la variable. Solo ponlo varfrente asignedIn = false


Supongo que eso es solo un error tipográfico en el código publicado (junto con el corchete de cierre que falta en viewDidLoad.
shim

0

Mi problema fue llamar a mi programa con el mismo nombre que uno de sus cocoapods. Causó un conflicto. Solución: cree un programa con un nombre diferente.


0

No se trata directamente de su ejemplo de código, sino en general sobre el error. Lo estoy escribiendo aquí, porque Google dirige este error a esta pregunta, por lo que puede ser útil para los otros desarrolladores.


Otro caso de uso en el que puede recibir dicho error es cuando está agregando un selector al método en otra clase, por ejemplo:

private class MockTextFieldTarget {
private(set) var didCallDoneAction = false
    @objc func doneActionHandler() {
        didCallDoneAction = true
    }
}

Y luego en otra clase:

final class UITextFieldTests: XCTestCase {
    func testDummyCode() {
        let mockTarget = MockTextFieldTarget()
        UIBarButtonItem(barButtonSystemItem: .cancel, target: mockTarget, action: MockTextFieldTarget.doneActionHandler)
        // ... do something ...
    }
}

Si en la última línea simplemente llamaras en #selector(cancelActionHandler)lugar de #selector(MockTextFieldTarget.cancelActionHandler), obtendrías

uso de identificador no resuelto

error.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.