'Uso de identificador não resolvido' em Swift


93

Tenho feito um aplicativo e tudo está funcionando muito bem. Mas hoje fiz uma nova classe como de costume e por algum motivo nesta classe não consigo acessar a variável Pública / Global de outras classes. Todas as outras classes podem, mas agora, sempre que tento fazer uma nova classe, não consigo. Como isso seria consertado?

Estou usando Swift e Xcode 6.

Classe operária:

import UIKit
import Foundation
import Parse
import CoreData

var signedIn = true

class ViewController: UIViewController {

Nova Classe:

import UIKit

class NewClass: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        signedIn = false

}

Mas em signedIn = false

Recebo o erro:

uso do identificador não resolvido "assinadoIn"


e sim, eu excluí e recriei essa classe várias vezes
Apple Geek

Por favor, mostre seu código, funcionando ou não.
Wez

Você pode especificar a versão do XCode / Swift que está usando (se é beta ou não)?
lchamp

@Ichamp Xcode 6.1 não beta.
Apple Geek

1
Este é o seu código completo? por causa do seu recuo, parece que está faltando uma chave }no final de seuviewDidLoad()
Wez

Respostas:


296

Um possível problema é que sua nova classe tem um alvo diferente ou alvos diferentes do outro.

Por exemplo, ele pode ter um alvo de teste enquanto o outro não. Para este caso específico, você deve incluir todas as suas classes no destino de teste ou nenhuma delas.

Alvos


Se a classe estiver em um destino diferente, certifique-se de importá-lo no topo do seu arquivo swift
Medhi

2
hehe, isso foi um problema. Esqueci de configurar um alvo para a aula. Tnx :)
tBug

Oh cara, eu gastei algumas horas para resolver este. Uma mensagem de erro tão estúpida. Mesmo o erro de sintaxe é melhor!
testado em

sim .. não foi definido em um alvo para um projeto de teste !! obrigado
reidisaki

1
O meu estava dentro, mas eu apenas desmarquei e verifiquei novamente, o que corrigiu isso E meu autocomplete / intellisense voltou!
Stephen J

7

'Uso de identificador não resolvido' no Swift também pode acontecer quando você se esquece de importar uma biblioteca. Por exemplo, tenho o erro: insira a descrição da imagem aqui

Em que eu esqueci o UIKit

importar UIKit


1
import AVFoundation
Jenita _Alice4Real

5

Uma vez que tive esse problema depois de renomear um arquivo. Renomeei o arquivo de dentro do Xcode, mas depois o Xcode não conseguiu encontrar a função no arquivo. Mesmo uma reconstrução limpa não corrigiu o problema, mas fechar e reabrir o projeto fez com que a construção funcionasse.


Isso também funciona para alterar a localização de um arquivo
Logan George

exatamente certo, removi as referências de arquivos e, em seguida, adicionei-os novamente. e tudo funcionou
Hamed Nova

4

Às vezes, o compilador fica confuso sobre a sintaxe da sua classe. Isso acontece muito se você colar o código-fonte de outro lugar.

Tente reduzir o arquivo de origem "não resolvido" ao mínimo, limpando e criando. Uma vez que seja construído com sucesso, adicione toda a complexidade de volta à sua classe.

Isso fez com que tudo desaparecesse para mim quando reiniciar o Xcode não funcionasse.


4

Outro lugar em que vi esse erro é quando seu projeto tem vários destinos E vários cabeçalhos de ponte . Se for uma classe compartilhada, certifique-se de adicionar o recurso a todos os cabeçalhos de ponte.

Uma boa dica é olhar no painel esquerdo do Issue Navigator; o objeto raiz mostrará o alvo que está emitindo a reclamação.


3

Para mim, esse erro aconteceu porque eu estava tentando chamar uma função aninhada . Única coisa que eu tinha que fazer para tê-lo fixo era trazer a função fora de um âmbito onde era visível.


Por "trazer a função para um escopo onde ela era visível", você quer dizer marcá-la como pública?
Barry Jones

Não. Apenas movendo / arrastando a função para um escopo diferente, ou seja, dentro do escopo da classe
Honey,

3

No meu caso, eu tinha um arquivo Object-C que também estava na mesma associação de destino. Consertei adicionando #import "YourObjectCFileHeader.h"arquivo internoBridging-Header.h


1

Porque você não declarou isso. Se você quiser usar uma variável de outra classe, você deve usar

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

Você tem que colocar este código no final do código NewClass


sim, mas eu usei outras classes e elas funcionaram bem sem isso, é só quando eu faço essa nova classe.
Apple Geek

2
Isso não funcionará, ele tem a variável assinadoIn declarada no escopo global, não dentro de sua classe.
Sam

1

Sua NewClassherda de UIViewController. Você declarou signedInem ViewController. Se você quiser NewClassidentificar essa variável, ela terá que ser declarada em uma classe da qual você NewClassherda.


1

Recebi este erro para Mantle Framework em meu projeto Objective-Swift. O que eu tentei é,

  1. Verifique se a importação está no arquivo Bridging-Header.h
  2. Altere a associação de destino para a estrutura no arquivo Mantle.h conforme mostrado na captura de tela abaixo.

Alterne entre membros privados, primeiro crie o projeto e acabe com erros. Em seguida, construa o projeto com Public Membership para todos os frameworks surgidos para o arquivo Mantle.h , você deve obter sucesso.

É apenas um bug de construção com estrutura múltipla no projeto Objective-C Swift.

insira a descrição da imagem aqui


0

Se isso se refere a uma classe que você criou, certifique-se de que a classe não esteja aninhada.

Fe

A.swift

class A {

   class ARelated {

   }
}

chamar var b = ARelated()fornecerá 'Uso de identificador não resolvido: ARelated'.

Você também pode:

1) separe as classes se desejar no mesmo arquivo:

A.swift

class A {

}

class ARelated {

}

2) Mantenha sua mesma estrutura e use a classe envolvente para chegar à subclasse:

var b = A.ARelated


0

Eu cometi um erro estúpido. Esqueci de mencionar a classe como pública ou aberta ao atualizar o código no espaço de trabalho do cocoapod.

Verifique se o acessório está trabalhando em uma área de trabalho separada.


0

Você se esqueceu de declarar a variável. Basta colocar varna frente designedIn = false


Eu presumiria que isso é apenas um erro de digitação no código postado (junto com o colchete de fechamento ausente em viewDidLoad.
shim

0

Meu problema era chamar meu programa com o mesmo nome de um de seus cocoapods. Isso causou um conflito. Solução: Crie um nome diferente para o programa.


0

Isso não é diretamente para o seu exemplo de código, mas em geral sobre o erro. Estou escrevendo aqui, porque o Google direciona esse erro para esta questão, então pode ser útil para os outros desenvolvedores.


Outro caso de uso em que você pode receber esse erro é quando está adicionando um seletor a um método em outra classe, por exemplo:

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

E então em outra aula:

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

Se na última linha você simplesmente ligasse em #selector(cancelActionHandler)vez de #selector(MockTextFieldTarget.cancelActionHandler), obteria

uso de identificador não resolvido

erro.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.