Eu tenho um tipo no meu módulo:
import Cocoa
class ColoredDotView : NSView {
...
}
É usado em várias classes diferentes sem problemas:
class EditSubjectPopoverController : NSObject {
@IBOutlet internal var subjectColorDotView : ColoredDotView!
...
}
Mas, por algum motivo , quando eu o uso em uma classe específica , tenho erros de compilação no 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...
...
}
O erro de compilação é:
EditTaskPopoverController.swift: 15: 49: Uso do tipo não declarado 'ColoredDotView'
O que eu não entendo. É o primeiro erro de compilação no arquivo, e o restante dos erros é sintomático do primeiro. Além disso, não há outros arquivos com erros de compilação. Não entendo por que o tipo não é declarado, pois o arquivo está no mesmo módulo:
Eu tentei limpar o projeto, limpar a pasta de compilação e reiniciar o Xcode, sem sucesso. Quais erros em potencial podem causar um undeclared type
erro de compilação no Swift?
var
declarações e chego a uma versão passageira. Depois, adiciono uma das declarações na parte superior e o erro volta imediatamente: imgur.com/VUUBK2KRespostas:
Para mim, encontrei esse erro quando meu destino de teste não tinha alguns arquivos rápidos que meu destino de criação de aplicativos tinha em fontes de compilação. Foi muito confuso porque o 'tipo não declarado' estava sendo usado em muitos outros lugares sem problemas, e o erro parecia vago. Portanto, é claro que a solução foi adicionar o arquivo que contém o 'tipo não declarado' ao destino do teste.
fonte
Isso já foi respondido por @Craig Otis, mas o problema é causado quando as classes em questão não pertencem aos mesmos destinos, geralmente o destino de teste está ausente. Apenas verifique se as seguintes caixas de seleção estão marcadas.
Editar
Para ver a associação de destino. Selecione seu arquivo e abra o inspetor de arquivos (⌥ + ⌘ + 1) [ opção ] + [ comando ] + 1
fonte
Ufa, finalmente diagnosticou isso. De alguma forma , o arquivo Swift ofensivo
EditTaskPopoverController.swift
estava em duas fases diferentes de compilação.Ele estava
Compile Sources
corretamente, com todos os outros arquivos Swift, mas também estava , por algum motivo muito estranho, naCopy Bundle Resources
fase, junto com todos os meus recursos XIB e de imagem.Não tenho ideia de como chegou lá, mas removê-lo da fase extra de compilação resolveu o problema.
fonte
No menu XCode, Produto-> Limpo e, em seguida, Produto-> Construção funcionou para mim. Encontrei esse problema quando adicionei um novo ViewController ao meu projeto no novo Grupo / Pasta.
fonte
Eu tive o mesmo problema. Alguns dos arquivos em minha estrutura não estavam acessíveis a partir de outras classes dentro do mesmo módulo.
Por alguma razão, os arquivos que foram adicionados à estrutura no Xcode não faziam parte das fontes de compilação. Se o seu arquivo Swift não faz parte das fontes de compilação, você precisa adicioná-los tocando no + e selecionando-os no pop-up.
Verifique também se o arquivo faz parte do destino da estrutura. (A pequena caixa na imagem abaixo deve estar marcada)
fonte
A causa para mim foi um nome de função que começou com os mesmos caracteres que um tipo:
e na implementação eu tive uma função começando com CustomTableView
A correção foi alterar a assinatura da função para que não começasse com os mesmos caracteres do tipo (CustomTableView), por exemplo:
Esta foi uma mensagem de erro muito enganadora para a causa real no meu caso.
fonte
Caso alguém encontre um problema semelhante, mas a correção do Compile Sources não resolva o problema, reiniciar o Xcode pode (funcionou para mim). Minha versão do Xcode é
Version 6.1 (6A1052d)
.fonte
No meu aplicativo, tenho delegado de aplicativo e outras classes que precisam ser acessadas pelos testes como públicas. Conforme descrito aqui , importo meu aplicativo em meus testes.
Quando criei duas novas classes recentemente, seus alvos de teste eram as partes principal e de teste. Removê-los da associação dos testes resolveu o problema.
fonte
No meu caso, as fontes de compilação do TestTarget estavam tendo arquivos do Main Target .
Ref :
Por que isso acontece?
Isso acontece desde que verificamos a associação TestTarget ao criar o arquivo
Ou marque manualmente esta opção no inspetor.
Ref :
Como eu resolvi?
fonte
fonte
Tentei muitas das soluções oferecidas aqui, mas, eventualmente, excluí o arquivo e o criei novamente, e o Xcode foi modificado: /
fonte
Isso também pode acontecer se você acidentalmente capitalizar o nome do parâmetro e chamá-lo da mesma forma que o objeto.
fonte
Isso pode ajudar alguém.
Eu criei um novo projeto de teste com o Core Data chamado "CoreData". Em pouco tempo, recebi "Uso de tipo não declarado" para NSManagedObjectContext e outras classes de dados principais. Após várias tentativas de importação, adicionando às fases de compilação, etc. Excluí o projeto e iniciei um novo chamado "TestingCoreData" e tudo funcionou bem.
Não nomear (testar) projetos como o nome das classes
fonte
Isso também pode acontecer se você tiver uma função com o mesmo nome que um tipo de objeto em sua assinatura. Por exemplo:
fará com que o compilador fique confuso (e com razão), pois o compilador primeiro procurará localmente no arquivo antes de examinar outros arquivos. Então ele olha para "Player" na assinatura e pensa que não é um objeto nesse escopo, mas uma função, então algo está errado.
Talvez essa seja uma boa razão para eu não capitalizar as funções de classe. :)
fonte
Recebi essa mensagem de erro no Xcode 8 ao refatorar o código em uma estrutura, mas esqueci de declarar a classe na estrutura como
public
fonte
Talvez você tenha adicionado classe com alguns "FirstNameClass" e depois renomeado manualmente para "ColoredDotView". Tente copiar o conteúdo da classe "ColoredDotView" para a área de transferência, remova "ColoredDotView" do projeto e adicione novamente.
Esse id resolve um problema semelhante de mim.
fonte
No meu caso, foi um erro cometido por mim. Adicionei um novo arquivo como "OS X> Origem> Classe Cocoa", em vez de "iOS> Origem> Classe Cocoa Touch".
fonte
No meu caso, isso foi causado por um nome de subclasse sendo usado na linha seguinte, como um nome de variável com um tipo diferente:
Observe que na linha 1, pipGlow é o nome da subclasse (de SKShapeNode), mas na linha dois, eu estava usando pipGlow como um nome de variável. Este não era apenas um estilo de codificação ruim, mas aparentemente um não-não definitivo também! Depois de alterar a segunda linha para:
Não recebi mais o erro. Espero que isso ajude alguém!
fonte
Ao testar o código Swift que pertence ao aplicativo, verifique primeiro se o destino do teste está criando o aplicativo como uma dependência. Em seu teste, importe o aplicativo como um módulo. Por exemplo:
@testable import MyApplication
Isso tornará os objetos Swift que fazem parte do aplicativo disponíveis para o teste.
fonte
No meu caso, isso foi causado pela codificação de texto dos arquivos rápidos. Um arquivo mostrou 'No Explicit Encoding' e, depois de convertido para 'UTF-8', o problema foi resolvido.
E a razão pela qual a codificação de texto do arquivo não é explícita é que copiei todo o código de outro arquivo rápido.
Nenhuma captura de tela explícita da codificação
Captura de tela UTF-8
fonte
A limpeza do projeto resolveu meu problema.
Etapas: Produto -> Limpar (ou Shift + Cmd + K)
fonte
No meu caso, eu queria adicionar um método com um objeto swift personalizado como um parâmetro de tipo, e o nome que dei à variável no parâmetro era exatamente o mesmo que o nome da classe de objeto personalizado
Os problemas eram algo assim:
A parte em negrito estava causando o erro do tipo não declarado
fonte
como outros mencionados bem e neste tópico
uso de arquivos rápidos desnecessários em "copiar recursos do pacote"
fonte
Como outros, era algum código não relacionado que estava causando o
@testable
mau funcionamento.No meu alvo de teste, havia um arquivo de cabeçalho Objective-C que tinha
@import ModuleUnderTest;
Eu removi esta linha (porque a importação era realmente desnecessária) e milagrosamente comecei
@testable
a trabalhar novamente.Eu só consegui rastrear isso, mas removi tudo do meu projeto e o adicionei novamente pouco a pouco até que falhou. Eventualmente, encontrei a linha do código com problema.
fonte
se você está acessando através de diferente
module
ouTarget
então você só precisa dele parapublic
elefonte
Caso alguém cometa o mesmo erro bobo que eu cometi ...
Eu estava recebendo esse erro porque, ao renomear meu arquivo de origem, removi acidentalmente
.
o nome do arquivo e, portanto, o compilador tratou o arquivo como um arquivo de texto sem formatação e não como fonte para compilar.então eu quis mudar o nome do arquivo,
MyProtocol.swift
mas acidentalmente o nomeeiMyProtocolswift
É um erro simples, mas não era óbvio que era isso que estava acontecendo.
fonte
Não adicionar a remcartação de importação correta também pode ser uma falha óbvia. Para mim, simplesmente omiti a importação do PriorityUIKit.
fonte
Minha situação é que eu arrasto um novo arquivo XXView.swift para o projeto. E declare um tipo de exibição como XXView, em seguida, o erro "uso do tipo não declarado ....".
Eu apenas tento adicionar meu XXView.swift ao destino do teste, que resolveu o erro. Mas eu não queria que minha classe de interface do usuário estivesse envolvida no destino do teste.
Finalmente, encontrei meu ViewController já no alvo de teste, o que não deveria acontecer. (Eu acho que porque eu criei o VC por um xctemplate, portanto, ele será automaticamente incluído no destino do teste)
Eu removo o controlador de exibição do alvo de teste e, agora, meu XXView não precisa mais ser adicionado ao alvo de teste.
Conclusão: verifique se todos os arquivos relacionados também devem desmarcar o destino do teste.
fonte
Depois de passar uma hora com esse erro, descobri que o arquivo do módulo está duplicado. exclua o arquivo extra e desloque + cmd + k para limpar e o erro desaparece.
fonte
No meu caso, o problema foi com um novo
class
não sendo reconhecido. Resolvi o problema excluindo a classe e re-adicionando-a, mas desta vez verificando aWatch App Extension
opção ao criar a nova classe.Observe que eu tenho uma extensão de aplicativo de exibição no meu aplicativo.
fonte
Target
.