J'ai un type dans mon module:
import Cocoa
class ColoredDotView : NSView {
...
}
Il est utilisé dans un certain nombre de classes différentes sans problème:
class EditSubjectPopoverController : NSObject {
@IBOutlet internal var subjectColorDotView : ColoredDotView!
...
}
Mais pour une raison quelconque , lorsque je l'utilise dans une classe spécifique , j'ai des erreurs de compilation sur le type:
class EditTaskPopoverController : NSObject {
@IBOutlet internal var lowPriorityDotView : ColoredDotView! // Error here
@IBOutlet internal var medPriorityDotView : ColoredDotView! // And here...
@IBOutlet internal var highPriorityDotView : ColoredDotView! // And here...
...
}
L'erreur de compilation est:
EditTaskPopoverController.swift: 15: 49: Utilisation du type non déclaré 'ColoredDotView'
Ce que je ne comprends pas. C'est la première erreur de compilation dans le fichier, et le reste des erreurs sont toutes symptomatiques de la première. De plus, il n'y a pas d'autres fichiers avec des erreurs de compilation. Je ne comprends pas pourquoi le type n'est pas déclaré, car le fichier est dans le même module:
J'ai essayé de nettoyer le projet, de nettoyer le dossier de construction et de redémarrer Xcode, en vain. Quels faux pas potentiels peuvent provoquer une undeclared type
erreur du compilateur dans Swift?
var
déclarations et je passe à une construction passagère. Ensuite, j'ajoute l' une des déclarations en haut, et l'erreur est de retour immédiatement: imgur.com/VUUBK2KRéponses:
Pour moi, j'ai rencontré cette erreur lorsque ma cible de test ne contenait pas de fichiers rapides que ma cible de construction d'application avait dans les sources de compilation. C'était très déroutant parce que le «type non déclaré» était utilisé sans problème dans tant d'autres endroits, et l'erreur semblait vague. La solution était donc bien sûr d'ajouter le fichier contenant le 'type non déclaré' à la cible de test.
la source
@Craig Otis a déjà répondu à cette question, mais le problème est causé lorsque les classes en question n'appartiennent pas aux mêmes cibles, généralement la cible de test est manquante. Assurez-vous simplement que les cases à cocher suivantes sont cochées.
Éditer
Pour voir l'appartenance cible. Sélectionnez votre fichier puis ouvrez l'inspecteur de fichiers (⌥ + ⌘ + 1) [ option ] + [ commande ] + 1
la source
Ouf, a finalement diagnostiqué cela. D'une manière ou d'une autre , le fichier Swift incriminé se
EditTaskPopoverController.swift
trouvait dans deux phases de construction différentes.C'était
Compile Sources
correctement, avec tous les autres fichiers Swift, mais c'était aussi , pour une raison très étrange, dans laCopy Bundle Resources
phase également, avec toutes mes ressources XIB et image.Je n'ai aucune idée de comment il est arrivé là, mais le retirer de la phase de construction supplémentaire a résolu le problème.
la source
Dans le menu XCode Product-> Clean puis Product-> Build a fonctionné pour moi. J'ai rencontré ce problème lors de l'ajout d'un nouveau ViewController à mon projet dans un nouveau groupe / dossier.
la source
J'ai eu exactement le même problème. Certains des fichiers de mon framework n'étaient pas accessibles à partir d'autres classes dans le même module.
Pour une raison quelconque, les fichiers qui avaient été ajoutés au framework dans Xcode ne faisaient pas partie des sources de compilation. Si votre fichier Swift ne fait pas partie des sources de compilation, vous devez les ajouter en appuyant sur le + et en les sélectionnant dans la fenêtre contextuelle.
Assurez-vous également que le fichier fait partie de la cible du framework. (La petite case dans la capture d'écran ci-dessous doit être cochée)
la source
La cause pour moi était un nom de fonction qui commençait par les mêmes caractères qu'un type:
et dans l'implémentation j'ai eu une fonction commençant par CustomTableView
Le correctif consistait à modifier la signature de la fonction afin qu'elle ne commence pas par les mêmes caractères que le type (CustomTableView), par exemple:
C'était un message d'erreur très trompeur pour la cause réelle dans mon cas.
la source
Si quelqu'un rencontre un problème similaire mais que le correctif des sources de compilation ne résout pas le problème, le redémarrage de Xcode peut (cela a fonctionné pour moi). Ma version de Xcode est
Version 6.1 (6A1052d)
.la source
Dans mon application, j'ai un délégué d'application et d'autres classes auxquelles les tests doivent accéder en tant que public. Comme indiqué ici , j'importe ensuite mon application dans mes tests.
Lorsque j'ai récemment créé deux nouvelles classes, leurs cibles de test étaient à la fois la partie principale et la partie de test. Les retirer de leur adhésion aux tests a résolu le problème.
la source
Dans mon cas, les sources de compilation du TestTarget contenaient des fichiers de la cible principale .
Réf :
Pourquoi cela arrive?
Cela se produit puisque nous vérifions l'association TestTarget lors de la création du fichier
Ou en cochant manuellement cette option depuis l'inspecteur.
Réf :
Comment ai-je résolu?
la source
la source
J'ai essayé de nombreuses solutions proposées ici, mais j'ai finalement supprimé le fichier et l'ai créé à nouveau, et Xcode a été apaisé: /
la source
Cela peut également se produire si vous mettez accidentellement en majuscule le nom du paramètre et que vous l'appelez de la même manière que l'objet.
la source
Cela pourrait aider quelqu'un.
J'ai créé un nouveau projet de test avec Core Data appelé "CoreData". Bientôt, j'ai "Utilisation de type non déclaré" pour NSManagedObjectContext et d'autres classes Core Data. Après plusieurs tentatives d'importation, d'ajout aux phases de construction, etc. J'ai supprimé le projet et en ai commencé un nouveau appelé "TestingCoreData" et tout a bien fonctionné.
Ne nommez pas (testez) les projets comme le nom des classes
la source
Cela peut également se produire si vous avez une fonction portant le même nom qu'un type d'objet dans votre signature. Par exemple:
entraînera la confusion du compilateur (et à juste titre) puisque le compilateur cherchera d'abord localement dans le fichier avant de regarder d'autres fichiers. Donc, il regarde "Player" dans la signature et pense que ce n'est pas un objet dans cette portée, mais une fonction, donc quelque chose ne va pas.
C'est peut-être une bonne raison pour laquelle je ne devrais pas capitaliser les fonctions de classe. :)
la source
J'ai reçu ce message d'erreur dans Xcode 8 lors de la refactorisation du code dans un framework, il s'avère que j'ai oublié de déclarer la classe dans le framework comme
public
la source
Peut-être avez-vous ajouté une classe avec certains "FirstNameClass" et après cela, renommer manuellement en "ColoredDotView". Essayez de copier le contenu de la classe «ColoredDotView» dans le presse-papiers, supprimez «ColoredDotView» du projet et ajoutez-en un autre.
Cet identifiant résout un problème similaire de ma part.
la source
Dans mon cas, c'était une erreur de ma part. J'ai ajouté un nouveau fichier comme "OS X> Source> Cocoa Class", au lieu de "iOS> Source> Cocoa Touch Class".
la source
Dans mon cas, cela a été causé par un nom de sous-classe utilisé dans la ligne suivante comme nom de variable avec un type différent:
Notez qu'à la ligne 1, pipGlow est le nom de la sous-classe (de SKShapeNode), mais à la ligne deux, j'utilisais pipGlow comme nom de variable. Ce n'était pas seulement un mauvais style de codage, mais apparemment aussi un non-non! Une fois que je change la deuxième ligne en:
Je n'ai plus reçu l'erreur. J'espère que ça aidera quelqu'un!
la source
Lorsque vous testez du code Swift appartenant à l'application, assurez-vous d'abord que la cible de test construit l'application en tant que dépendance. Ensuite, dans votre test, importez l'application en tant que module. Par exemple:
@testable import MyApplication
Cela rendra les objets Swift qui font partie de l'application disponibles pour le test.
la source
Dans mon cas, cela a été causé par l'encodage de texte de Swift Files. Un fichier montrait «No Explicit Encoding», et après conversion en «UTF-8», le problème a été résolu.
Et la raison pour laquelle le codage du texte du fichier n'est pas explicite est que j'ai copié tout le code d'un autre fichier swift.
Aucune capture d'écran d'encodage explicite
Capture d'écran UTF-8
la source
Le nettoyage du projet a résolu mon problème.
Étapes: Produit -> Nettoyer (ou Shift + Cmd + K)
la source
Dans mon cas, je voulais ajouter une méthode avec un objet swift personnalisé en tant que paramètre de type, et le nom que j'ai donné à la variable dans le paramètre était exactement le même que le nom de la classe d'objet personnalisé
Les problèmes étaient quelque chose comme ceci:
La partie en caractères gras provoquait l'erreur de type non déclaré
la source
comme d'autres l'ont bien mentionné et dans ce fil
utilisation de fichiers Swift inutiles dans les «ressources de l'ensemble de copie»
la source
Comme d'autres, c'était un code non lié qui causait un
@testable
dysfonctionnement du.Dans ma cible de test, il y avait un fichier d'en-tête Objective-C qui avait
@import ModuleUnderTest;
J'ai supprimé cette ligne (car l'importation était en fait inutile) et j'ai
@testable
recommencé miraculeusement à travailler.Je n'ai pu que le localiser, mais en supprimant tout de mon projet et en le rajoutant petit à petit jusqu'à ce qu'il échoue. Finalement, j'ai trouvé la ligne de code problématique.
la source
si vous accédez à partir de différents
module
ouTarget
alors vous avez juste besoin àpublic
cela source
Au cas où quelqu'un ferait la même erreur stupide que moi ...
J'obtenais cette erreur car en renommant mon fichier source, j'ai accidentellement supprimé le
.
du nom de fichier et le compilateur a donc traité le fichier comme un fichier texte brut et non comme une source à compiler.donc je voulais renommer le fichier
MyProtocol.swift
mais je l'ai accidentellement nomméMyProtocolswift
C'est une simple erreur, mais il n'était pas évident que c'était ce qui se passait.
la source
Ne pas ajouter la délcaration d'importation correcte peut également être un échec évident. Pour moi, j'avais simplement omis d'importer PriorityUIKit.
la source
Ma situation est que je glisse un nouveau fichier XXView.swift dans le projet. Et déclarez qu'un type de vue est XXView puis l'erreur "utilisation de type non déclaré ....".
J'essaie juste d'ajouter mon XXView.swift à la cible de test dont il a résolu l'erreur. Mais je ne voulais pas que ma classe d'interface utilisateur soit impliquée dans la cible de test.
Enfin, j'ai trouvé mon ViewController déjà dans la cible de test, ce qui ne devrait pas se produire. (Je pense que parce que je crée le VC par un xctemplate donc, il sera automatiquement inclus dans la cible de test)
Je supprime le contrôleur de vue de la cible de test, puis mon XXView n'a plus besoin d'être ajouté à la cible de test.
Conclusion: assurez-vous que tous vos fichiers associés doivent également décocher la cible de test.
la source
Après avoir passé une heure sur cette erreur, j'ai constaté que le fichier du module était dupliqué. supprimez le fichier supplémentaire, et shift + cmd + k pour nettoyer et l'erreur a disparu.
la source
Dans mon cas, le problème était qu'un nouveau
class
n'était pas reconnu. J'ai résolu le problème en supprimant la classe et en l'ajoutant à nouveau, mais cette fois en cochant l'Watch App Extension
option lors de la création de la nouvelle classe.Veuillez noter que j'ai une extension Watch App dans mon application.
la source
Target
.