"Uso dell'identificatore irrisolto" in Swift


93

Quindi ho creato un'app e tutto ha funzionato alla grande. Ma oggi ho creato una nuova classe come al solito e per qualche motivo in questa classe non posso accedere alla variabile pubblica / globale da altre classi. Tutte le altre classi possono, ma ora, quando cerco di creare una nuova classe, non posso. Come verrebbe risolto?

Sto usando Swift e Xcode 6.

Classe operaia:

import UIKit
import Foundation
import Parse
import CoreData

var signedIn = true

class ViewController: UIViewController {

Nuova classe:

import UIKit

class NewClass: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        signedIn = false

}

Ma avanti signedIn = false

Ottengo l'errore:

uso dell'identificativo irrisolto "signedIn"


e sì, ho cancellato e ricreato questa classe più volte
Apple Geek

Si prega di mostrare il codice, funzionante e non funzionante.
Wez

Puoi specificare la versione di XCode / Swift che stai utilizzando (se è beta o no)?
lchamp

@ Ichamp Xcode 6.1 non beta.
Apple Geek

1
È questo il tuo codice completo? a causa della tua rientranza sembra che ti manchi una parentesi graffa }alla fine del tuoviewDidLoad()
Wez

Risposte:


296

Un possibile problema è che la tua nuova classe abbia un Target diverso o Target diversi dall'altro.

Ad esempio, potrebbe avere un obiettivo di test mentre l'altro no. Per questo caso specifico, devi includere tutte le tue classi nel target di test o nessuna di esse.

Obiettivi


Se la classe si trova in un target diverso, assicurati di importarla sopra il tuo file swift
Medhi

2
hehe, quello era un problema. Ho dimenticato di impostare un obiettivo per la lezione. Tnx :)
tBug

Oh amico, ho passato un paio d'ore a risolvere questo problema. Un messaggio di errore così stupido. Anche l'errore di sintassi è migliore!
turingtestato il

sì .. non era fissato in un obiettivo per un progetto di prova !! grazie
reidisaki

1
Il mio era dentro, ma ho appena deselezionato e ricontrollato, il che ha risolto questo problema E il mio completamento automatico / intellisense è tornato!
Stephen J

7

"Uso dell'identificatore non risolto" in Swift my si verifica anche quando ti sei dimenticato di importare una libreria. Ad esempio ho l'errore: inserisci qui la descrizione dell'immagine

In cui ho dimenticato il file UIKit

importa UIKit


1
import AVFoundation
Jenita _Alice4Real

6

Una volta ho avuto questo problema dopo aver rinominato un file. Ho rinominato il file da Xcode, ma in seguito Xcode non è riuscito a trovare la funzione nel file. Anche una ricostruzione pulita non ha risolto il problema, ma la chiusura e la riapertura del progetto hanno consentito alla build di funzionare.


Funziona anche per modificare la posizione di un file
Logan George

esattamente giusto ho rimosso i riferimenti ai file e poi li ho aggiunti di nuovo. e tutto ha funzionato
Hamed Nova

4

A volte il compilatore si confonde sulla sintassi nella tua classe. Questo accade spesso se incolli il codice sorgente da qualche altra parte.

Prova a ridurre il file sorgente "irrisolto" al minimo indispensabile, pulendolo e costruendolo. Una volta costruito con successo, aggiungi tutta la complessità alla tua classe.

Questo mi ha fatto sparire quando il riavvio di Xcode non ha funzionato.


4

Un altro posto in cui ho riscontrato questo errore è quando il tuo progetto ha più obiettivi E più intestazioni di bridging . Se è una classe condivisa, assicurati di aggiungere la risorsa a tutte le intestazioni di bridging.

Un buon consiglio è quello di guardare nel pannello Issue Navigator a sinistra; l'oggetto root mostrerà la destinazione che sta emettendo il reclamo.


3

Per me questo errore si è verificato perché stavo cercando di chiamare una funzione nidificata . L'unica cosa che dovevo fare per risolverlo era portare la funzione in un ambito in cui fosse visibile.


Con "porta la funzione in un ambito in cui era visibile", intendi contrassegnarla come pubblica?
Barry Jones

No. Semplicemente spostando / trascinando la funzione in un ambito diverso, ad esempio nell'ambito della classe
Honey

3

Nel mio caso, avevo un file Object-C che era anche nella stessa Appartenenza di destinazione. Ho risolto aggiungendo #import "YourObjectCFileHeader.h"all'interno del fileBridging-Header.h


1

Perché non l'hai dichiarato. Se vuoi usare una variabile di un'altra classe devi usare

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

Devi mettere questo codice alla fine del codice NewClass


sì, ma ho usato altri corsi e hanno funzionato bene senza quello, è solo quando creo questo nuovo corso.
Apple Geek

2
Questo non funzionerà, ha la variabile signedIn dichiarata nell'ambito globale, non all'interno della sua classe.
Sam

1

La tua NewClasseredita da UIViewController. Hai dichiarato signedInin ViewController. Se vuoi NewClassessere in grado di identificare quella variabile, dovrai dichiararla in una classe da cui NewClasserediti.


1

Ho ricevuto questo errore per Mantle Framework nel mio progetto Objective-Swift. Quello che ho provato è

  1. Controlla se l'importazione è presente nel file Bridging-Header.h
  2. Modificare l'appartenenza di destinazione per Framework nel file Mantle.h come mostrato nell'immagine sottostante.

Passa dall'appartenenza privata prima a costruire il progetto, finisci con errori. Quindi crea il progetto con Public Membership per tutti i framework apparsi per il file Mantle.h , devi avere successo.

È solo un bug di costruzione con più framework nel progetto Objective-C Swift.

inserisci qui la descrizione dell'immagine


0

Se questo riguarda una classe che hai creato, assicurati che la classe non sia nidificata.

Fe

A.swift

class A {

   class ARelated {

   }
}

la chiamata var b = ARelated()darà "Use of unresolved identifier: ARelated".

Puoi:

1) separare le classi se si desidera sullo stesso file:

A.swift

class A {

}

class ARelated {

}

2) Mantieni la tua stessa struttura e usa la classe che la racchiude per arrivare alla sottoclasse:

var b = A.ARelated


0

Ho fatto uno stupido errore. Ho dimenticato di menzionare la classe come pubblica o aperta durante l'aggiornamento del codice nell'area di lavoro cocoapod.

Si prega di controllare se l'accessor se si lavora in un'area di lavoro separata.


0

Hai dimenticato di dichiarare la variabile. Metti solo vardi frontesignedIn = false


Presumo che sia solo un errore di battitura nel codice pubblicato (insieme alla parentesi di chiusura mancante su viewDidLoad.
shim

0

Il mio problema era chiamare il mio programma con lo stesso nome di uno dei suoi cocoapodi. Ha causato un conflitto. Soluzione: creare un programma con un nome diverso.


0

Non si tratta direttamente del codice di esempio, ma in generale dell'errore. Lo sto scrivendo qui, perché Google indirizza questo errore a questa domanda, quindi potrebbe essere utile per gli altri sviluppatori.


Un altro caso d'uso in cui è possibile ricevere tale errore è quando si aggiunge un selettore a un metodo in un'altra classe, ad esempio:

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

E poi in un'altra classe:

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

Se nell'ultima riga chiamassi semplicemente #selector(cancelActionHandler)invece di #selector(MockTextFieldTarget.cancelActionHandler), riceveresti

uso di identificatori irrisolti

errore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.