Ich habe einen Typ in meinem Modul:
import Cocoa
class ColoredDotView : NSView {
...
}
Es wird in verschiedenen Klassen ohne Probleme verwendet:
class EditSubjectPopoverController : NSObject {
@IBOutlet internal var subjectColorDotView : ColoredDotView!
...
}
Aber aus irgendeinem Grund , wenn ich es in einer bestimmten Klasse verwende, habe ich Kompilierungsfehler für den Typ:
class EditTaskPopoverController : NSObject {
@IBOutlet internal var lowPriorityDotView : ColoredDotView! // Error here
@IBOutlet internal var medPriorityDotView : ColoredDotView! // And here...
@IBOutlet internal var highPriorityDotView : ColoredDotView! // And here...
...
}
Der Kompilierungsfehler lautet:
EditTaskPopoverController.swift: 15: 49: Verwendung des nicht deklarierten Typs 'ColoredDotView'
Was ich nicht verstehe. Es ist der erste Kompilierungsfehler in der Datei, und der Rest der Fehler ist symptomatisch für den ersten. Außerdem gibt es keine anderen Dateien mit Kompilierungsfehlern. Ich verstehe nicht, warum der Typ nicht deklariert ist, da sich die Datei im selben Modul befindet:
Ich habe versucht, das Projekt zu bereinigen, den Build-Ordner zu bereinigen und Xcode neu zu starten, ohne Erfolg. Welche möglichen Fehltritte können einen undeclared type
Compilerfehler in Swift verursachen?
var
Deklarationen und komme zu einem vorübergehenden Build. Dann füge ich eine der Deklarationen oben hinzu und der Fehler ist sofort wieder da: imgur.com/VUUBK2KAntworten:
Bei mir trat dieser Fehler auf, als mein Testziel keine schnellen Dateien hatte, die mein App-Build-Ziel in Kompilierungsquellen hatte. Es war sehr verwirrend, weil der "nicht deklarierte Typ" an so vielen anderen Orten ohne Probleme verwendet wurde und der Fehler vage schien. Daher bestand die Lösung natürlich darin, die Datei mit dem 'nicht deklarierten Typ' zum Testziel hinzuzufügen.
quelle
Dies wurde bereits von @Craig Otis beantwortet, aber das Problem wird verursacht, wenn die fraglichen Klassen nicht zu denselben Zielen gehören, normalerweise fehlt das Testziel. Stellen Sie einfach sicher, dass die folgenden Kontrollkästchen aktiviert sind.
Bearbeiten
Anzeigen der Zielmitgliedschaft. Wählen Sie Ihre Datei aus und öffnen Sie den Dateiinspektor (⌥ + ⌘ + 1) [ Option ] + [ Befehl ] + 1
quelle
Puh, endlich diagnostiziert. Irgendwie befand sich die fehlerhafte Swift-Datei
EditTaskPopoverController.swift
in zwei verschiedenen Erstellungsphasen.Es war in
Compile Sources
richtig, mit allen anderen Swift - Dateien, aber es war auch für einige sehr seltsamen Grund, in derCopy Bundle Resources
Phase als auch zusammen mit allen meinen XIB und Bildressourcen.Ich habe keine Ahnung, wie es dort hingekommen ist, aber das Entfernen aus der zusätzlichen Build-Phase hat das Problem behoben.
quelle
Im XCode-Menü hat Produkt-> Reinigen und dann Produkt-> Erstellen für mich funktioniert. Dieses Problem trat auf, als ich meinem Projekt in einer neuen Gruppe / einem neuen Ordner einen neuen ViewController hinzufügte.
quelle
Ich hatte genau das gleiche Problem. Einige der Dateien in meinem Framework waren von anderen Klassen innerhalb desselben Moduls nicht erreichbar.
Aus irgendeinem Grund waren die Dateien, die dem Framework in Xcode hinzugefügt wurden, nicht Teil der Kompilierungsquellen. Wenn Ihre Swift-Datei nicht Teil der Kompilierungsquellen ist, müssen Sie sie hinzufügen, indem Sie auf das + tippen und sie im Popup auswählen.
Stellen Sie außerdem sicher, dass die Datei Teil des Framework-Ziels ist. (Das Kästchen im Screenshot unten sollte aktiviert sein.)
quelle
Die Ursache für mich war ein Funktionsname, der mit denselben Zeichen wie ein Typ begann:
und in der Implementierung hatte ich eine Funktion, die mit CustomTableView begann
Das Update bestand darin, die Funktionssignatur so zu ändern, dass sie nicht mit denselben Zeichen wie der Typ (CustomTableView) beginnt, z.
Dies war in meinem Fall eine sehr irreführende Fehlermeldung für die eigentliche Ursache.
quelle
Falls jemand auf ein ähnliches Problem stößt, der Fix Compile Sources das Problem jedoch nicht löst, kann es sein, dass Xcode neu gestartet wird (es hat bei mir funktioniert). Meine Version von Xcode ist
Version 6.1 (6A1052d)
.quelle
In meiner App habe ich App-Delegaten und andere Klassen, auf die die Tests als öffentlich zugreifen müssen. Wie hier beschrieben , importiere ich dann meine App in meine Tests.
Als ich kürzlich zwei neue Klassen erstellt habe, waren ihre Testziele sowohl der Haupt- als auch der Testteil. Das Problem wurde behoben, indem sie aus ihrer Mitgliedschaft aus den Tests entfernt wurden.
quelle
In meinem Fall enthielten die Kompilierungsquellen des TestTargets Dateien vom Hauptziel .
Ref :
Warum passiert das?
Dies geschieht, da wir beim Erstellen der Datei die TestTarget-Zuordnung überprüfen
Oder aktivieren Sie diese Option manuell im Inspektor.
Ref :
Wie habe ich gelöst?
quelle
quelle
Ich habe viele der hier angebotenen Lösungen ausprobiert, aber schließlich die Datei gelöscht und erneut erstellt, und Xcode wurde besänftigt: /
quelle
Dies kann auch passieren, wenn Sie versehentlich den Parameternamen groß schreiben und ihn wie das Objekt aufrufen.
quelle
Dies könnte jemandem helfen.
Ich habe mit Core Data ein neues Testprojekt namens "CoreData" erstellt. In Kürze habe ich "Verwendung von nicht deklariertem Typ" für NSManagedObjectContext und andere Core Data-Klassen. Nach mehreren Versuchen des Importierens, Hinzufügens zu Build-Phasen usw. habe ich das Projekt gelöscht und ein neues mit dem Namen "TestingCoreData" gestartet, und alles hat gut funktioniert.
Benennen (testen) Sie keine Projekte wie den Namen der Klassen
quelle
Dies kann auch passieren, wenn Ihre Signatur eine Funktion mit demselben Namen wie ein Objekttyp enthält. Beispielsweise:
Dies führt dazu, dass der Compiler verwirrt wird (und das zu Recht), da der Compiler zuerst lokal in der Datei sucht, bevor er andere Dateien betrachtet. Es schaut also auf "Player" in der Signatur und denkt, das ist kein Objekt in diesem Bereich, sondern eine Funktion, also stimmt etwas nicht.
Vielleicht ist dies ein guter Grund, warum ich Klassenfunktionen nicht groß schreiben sollte. :) :)
quelle
Ich habe diese Fehlermeldung in Xcode 8 erhalten, als ich Code in ein Framework umgestaltet habe. Es hat sich herausgestellt, dass ich vergessen habe, die Klasse im Framework als zu deklarieren
public
quelle
Vielleicht haben Sie eine Klasse mit "FirstNameClass" hinzugefügt und danach manuell in "ColoredDotView" umbenannt. Versuchen Sie, den Inhalt der Klasse "ColoredDotView" in die Zwischenablage zu kopieren, entfernen Sie "ColoredDotView" aus dem Projekt und fügen Sie agin hinzu.
Diese ID behebt ein ähnliches Problem von mir.
quelle
In meinem Fall war ein Fehler von mir gemacht. Ich habe eine neue Datei als "OS X> Quelle> Kakaoklasse" anstelle von "iOS> Quelle> Kakao-Touch-Klasse" hinzugefügt.
quelle
In meinem Fall wurde dies dadurch verursacht, dass in der nächsten Zeile ein Unterklassenname als Variablenname mit einem anderen Typ verwendet wurde:
Beachten Sie, dass in Zeile 1 pipGlow der Name der Unterklasse (von SKShapeNode) ist, in Zeile zwei jedoch pipGlow als Variablennamen verwendet habe. Dies war nicht nur ein schlechter Codierungsstil, sondern anscheinend auch ein absolutes Nein-Nein! Sobald ich die zweite Zeile in:
Ich habe den Fehler nicht mehr erhalten. Ich hoffe das hilft jemandem!
quelle
Stellen Sie beim Testen von Swift-Code, der zur Anwendung gehört, zunächst sicher, dass das Testziel die Anwendung als Abhängigkeit erstellt. Importieren Sie dann in Ihrem Test die Anwendung als Modul. Beispielsweise:
@testable import MyApplication
Dadurch werden die Swift-Objekte, die Teil der Anwendung sind, für den Test verfügbar.
quelle
In meinem Fall wurde dies durch die Textcodierung von schnellen Dateien verursacht. Eine Datei zeigte 'Keine explizite Codierung' und nach der Konvertierung in 'UTF-8' wurde das Problem behoben.
Und der Grund, warum die Textcodierung der Datei nicht explizit ist, ist, dass ich den gesamten Code aus einer anderen schnellen Datei kopiert habe.
Kein expliziter Codierungs-Screenshot
UTF-8 Screenshot
quelle
Das Reinigen des Projekts hat mein Problem gelöst.
Schritte: Produkt -> Reinigen (oder Umschalt + Befehlstaste + K)
quelle
In meinem Fall wollte ich eine Methode mit einem benutzerdefinierten schnellen Objekt als Typparameter hinzufügen, und der Name, den ich der Variablen im Parameter gab, war genau der gleiche wie der Name der benutzerdefinierten Objektklasse
Die Probleme waren ungefähr so:
Der fett gedruckte Teil verursachte den Fehler eines nicht deklarierten Typs
quelle
wie andere gut erwähnt und in diesem Thread
Verwendung nicht benötigter schneller Dateien in "Bundle-Ressourcen kopieren"
quelle
Wie bei anderen war es ein nicht verwandter Code, der
@testable
zu Fehlfunktionen führte.In meinem Testziel gab es eine Objective-C-Header-Datei, die hatte
@import ModuleUnderTest;
Ich entfernte diese Zeile (weil der Import eigentlich unnötig war) und fing auf wundersame Weise
@testable
wieder an zu arbeiten.Ich konnte dies nur aufspüren, aber alles aus meinem Projekt entfernen und Stück für Stück wieder hinzufügen, bis es fehlschlug. Schließlich fand ich die Problemcodezeile.
quelle
wenn Sie es aus verschiedenen zugreifen
module
oderTarget
dann müssen Sie nur espublic
esquelle
Für den Fall, dass jemand den gleichen dummen Fehler macht, den ich gemacht habe ...
Ich habe diesen Fehler erhalten, weil ich beim Umbenennen meiner Quelldatei versehentlich die Datei
.
aus dem Dateinamen entfernt habe und der Compiler die Datei daher als reine Textdatei und nicht als zu kompilierende Quelle behandelt hat.Also wollte ich die Datei umbenennen, habe sie
MyProtocol.swift
aber versehentlich benanntMyProtocolswift
Es ist ein einfacher Fehler, aber es war nicht ohne weiteres offensichtlich, dass dies der Fall war.
quelle
Das Nicht-Hinzufügen der richtigen Import-Delkaration kann ebenfalls ein offensichtlicher Fehler sein. Für mich hatte ich es einfach unterlassen, PriorityUIKit zu importieren.
quelle
Meine Situation ist, dass ich eine neue Datei XXView.swift in das Projekt ziehe. Und deklarieren Sie einen View-Typ als XXView, dann den Fehler "Verwendung eines nicht deklarierten Typs ....".
Ich versuche nur, meine XXView.swift zum Testziel hinzuzufügen, mit dem der Fehler behoben wurde. Aber ich wollte nicht, dass meine UI-Klasse in das Testziel einbezogen wird.
Schließlich fand ich meinen ViewController bereits im Testziel, was nicht passieren sollte. (Ich denke, da ich die VC daher mit einer xctemplate erstelle, wird sie automatisch in das Testziel aufgenommen.)
Ich entferne den View Controller vom Testziel, und dann muss mein XXView nicht mehr zum Testziel hinzugefügt werden.
Fazit: Stellen Sie sicher, dass alle zugehörigen Dateien auch das Testziel deaktivieren.
quelle
Nachdem ich eine Stunde mit diesem Fehler verbracht hatte, stellte ich fest, dass die Moduldatei dupliziert wurde. Löschen Sie die zusätzliche Datei und verschieben Sie + cmd + k, um sie zu bereinigen. Der Fehler ist behoben.
quelle
In meinem Fall lag das Problem darin, dass ein neues
class
nicht erkannt wurde. Ich habe das Problem gelöst, indem ich die Klasse gelöscht und erneut hinzugefügt habe, diesmal jedoch dieWatch App Extension
Option beim Erstellen der neuen Klasse aktiviert habe.Bitte beachten Sie, dass meine Anwendung eine Watch App-Erweiterung enthält.
quelle
Target
.