Mam typ w moim module:
import Cocoa
class ColoredDotView : NSView {
...
}
Jest używany w wielu różnych klasach bez problemu:
class EditSubjectPopoverController : NSObject {
@IBOutlet internal var subjectColorDotView : ColoredDotView!
...
}
Ale z jakiegoś powodu , kiedy używam go w jednej konkretnej klasie, mam błędy kompilacji na typie:
class EditTaskPopoverController : NSObject {
@IBOutlet internal var lowPriorityDotView : ColoredDotView! // Error here
@IBOutlet internal var medPriorityDotView : ColoredDotView! // And here...
@IBOutlet internal var highPriorityDotView : ColoredDotView! // And here...
...
}
Błąd kompilacji to:
EditTaskPopoverController.swift: 15:49: użycie niezadeklarowanego typu „ColoredDotView”
Czego nie rozumiem. Jest to pierwszy błąd kompilacji w pliku, a pozostałe błędy są symptomatyczne dla pierwszego. Ponadto nie ma innych plików z błędami kompilacji. Nie rozumiem, dlaczego typ jest niezadeklarowany, ponieważ plik znajduje się w tym samym module:
Próbowałem wyczyścić projekt, wyczyścić folder kompilacji i ponownie uruchomić Xcode, ale bezskutecznie. Jakie potencjalne błędy mogą spowodować undeclared type
błąd kompilatora w języku Swift?
var
deklaracje i przechodzę do zaliczającej się kompilacji. Następnie dodaję jedną z deklaracji u góry i błąd wraca natychmiast: imgur.com/VUUBK2KOdpowiedzi:
W moim przypadku napotkałem ten błąd, gdy mój cel testowy nie miał niektórych szybkich plików, które mój cel kompilacji aplikacji miał w źródłach kompilacji. Było to bardzo zagmatwane, ponieważ „niezadeklarowany typ” był używany w tak wielu innych miejscach bez problemu, a błąd wydawał się niejasny. Tak więc rozwiązaniem było oczywiście dodanie pliku zawierającego „niezadeklarowany typ” do celu testowego.
źródło
Na to odpowiedział już @Craig Otis, ale problem pojawia się, gdy klasy, o których mowa, nie należą do tych samych celów, zwykle brakuje celu testowego. Upewnij się tylko, że poniższe pola wyboru są zaznaczone.
Edytować
Aby zobaczyć docelowe członkostwo. Wybierz plik, a następnie otwórz inspektora plików (⌥ + ⌘ + 1) [ opcja ] + [ polecenie ] + 1
źródło
Uff, w końcu to zdiagnozowałem. W jakiś sposób obraźliwy plik Swift
EditTaskPopoverController.swift
znajdował się w dwóch różnych fazach kompilacji.Był
Compile Sources
poprawnie umieszczony ze wszystkimi innymi plikami Swift, ale z jakiegoś bardzo dziwnego powodu był również wCopy Bundle Resources
fazie, wraz ze wszystkimi moimi zasobami XIB i obrazami.Nie mam pojęcia, jak to się tam dostało, ale usunięcie go z dodatkowej fazy kompilacji rozwiązało problem.
źródło
W menu XCode Produkt-> Wyczyść, a następnie Produkt-> Kompilacja zadziałało dla mnie. Napotkałem ten problem po dodaniu nowego ViewController do mojego projektu w nowej grupie / folderze.
źródło
Miałem dokładnie ten sam problem. Niektóre pliki w moim frameworku nie były osiągalne z innych klas w tym samym module.
Z jakiegoś powodu pliki, które zostały dodane do frameworka w Xcode nie były częścią Compile Sources. Jeśli Twój plik Swift nie jest częścią źródeł kompilacji, musisz je dodać, dotykając + i wybierając je w wyskakującym okienku.
Upewnij się również, że plik jest częścią celu platformy. (Małe okienko na poniższym zrzucie ekranu powinno być zaznaczone)
źródło
Przyczyną dla mnie była nazwa funkcji, która zaczynała się takimi samymi znakami jak typ:
aw implementacji miałem funkcję zaczynającą się od CustomTableView
Poprawka polegała na zmianie sygnatury funkcji, aby nie zaczynała się tymi samymi znakami, co typ (CustomTableView), np .:
To był bardzo mylący komunikat o błędzie dotyczący rzeczywistej przyczyny w moim przypadku.
źródło
Jeśli ktoś napotka podobny problem, ale poprawka Compile Sources nie rozwiązuje problemu, ponowne uruchomienie Xcode może (u mnie zadziałało). Moja wersja Xcode to
Version 6.1 (6A1052d)
.źródło
W mojej aplikacji mam delegata aplikacji i inne klasy, do których testy muszą mieć dostęp jako publiczne. Jak opisano tutaj , następnie importuję moją aplikację do moich testów.
Kiedy niedawno tworzyłem dwie nowe klasy, ich cele testowe były zarówno główną, jak i testową częścią. Usunięcie ich z członkostwa w testach rozwiązało problem.
źródło
W moim przypadku źródła kompilacji TestTarget miały pliki z głównego celu .
Odniesienie :
Dlaczego tak się dzieje?
Dzieje się tak, ponieważ podczas tworzenia pliku sprawdzamy skojarzenie TestTarget
Lub ręcznie zaznaczając tę opcję w inspektorze.
Odniesienie :
Jak to rozwiązałem?
źródło
źródło
Wypróbowałem wiele z oferowanych tutaj rozwiązań, ale ostatecznie usunąłem plik i utworzyłem go ponownie, a Xcode został zmodernizowany: /
źródło
Może się to również zdarzyć, jeśli przypadkowo użyjesz nazwy parametru z wielkiej litery i nazwiesz go tym samym, co obiekt.
źródło
To może komuś pomóc.
Stworzyłem nowy projekt testowy z Core Data o nazwie "CoreData". Wkrótce otrzymałem "Use of undeclared type" dla NSManagedObjectContext i innych klas Core Data. Po kilku próbach importowania, dodawania do fazy kompilacji itp. Usunąłem projekt i uruchomiłem nowy o nazwie „TestingCoreData” i wszystko działało dobrze.
Nie nazywaj (testuj) projektów, takich jak nazwa klas
źródło
Może się to również zdarzyć, jeśli masz w podpisie funkcję o tej samej nazwie, co typ obiektu. Na przykład:
spowoduje, że kompilator będzie zdezorientowany (i słusznie), ponieważ kompilator najpierw będzie szukał lokalnie w pliku, zanim przejrzy inne pliki. Więc patrzy na "Player" w sygnaturze i myśli, że to nie jest obiekt w tym zakresie, ale funkcja, więc coś jest nie tak.
Być może jest to dobry powód, dla którego nie powinienem używać wielkich liter w funkcjach klas. :)
źródło
Otrzymałem ten komunikat o błędzie w Xcode 8 podczas refaktoryzacji kodu w frameworku, wychodzi, że zapomniałem zadeklarować klasę w frameworku jako
public
źródło
Być może dodałeś klasę z jakąś „FirstNameClass”, a następnie ręcznie zmień nazwę na „ColoredDotView”. Spróbuj skopiować zawartość klasy „ColoredDotView” do schowka, usuń „ColoredDotView” z projektu i dodaj ponownie.
Ten identyfikator rozwiązuje podobny problem ode mnie.
źródło
W moim przypadku był to mój błąd. Dodałem nowy plik jako „OS X> Źródło> Cocoa Class” zamiast „iOS> Source> Cocoa Touch Class”.
źródło
W moim przypadku było to spowodowane użyciem nazwy podklasy w następnym wierszu jako nazwy zmiennej o innym typie:
Zauważ, że w linii 1 pipGlow jest nazwą podklasy (SKShapeNode), ale w linii drugiej użyłem pipGlow jako nazwy zmiennej. To był nie tylko zły styl kodowania, ale najwyraźniej również nie-nie! Kiedy zmienię drugą linię na:
Nie otrzymałem już błędu. Mam nadzieję, że to komuś pomoże!
źródło
Podczas testowania kodu Swift, który należy do aplikacji, najpierw upewnij się, że cel testu buduje aplikację jako zależność. Następnie w teście zaimportuj aplikację jako moduł. Na przykład:
@testable import MyApplication
Dzięki temu obiekty Swift, które są częścią aplikacji, będą dostępne do testu.
źródło
W moim przypadku było to spowodowane kodowaniem tekstu w plikach Swift. Jeden plik pokazywał „No Explicit Encoding”, a po przekonwertowaniu go na „UTF-8” problem został rozwiązany.
A powodem, dla którego kodowanie tekstu w pliku nie jest jednoznaczne, jest to, że skopiowałem cały kod z innego pliku Swift.
Zrzut ekranu bez jawnego kodowania
Zrzut ekranu UTF-8
źródło
Czyszczenie projektu rozwiązało mój problem.
Kroki: Produkt -> Wyczyść (lub Shift + Cmd + K)
źródło
W moim przypadku chciałem dodać metodę z niestandardowym obiektem Swift jako parametrem typu, a nazwa, którą nadałem zmiennej w parametrze, była dokładnie taka sama, jak nazwa niestandardowej klasy obiektu
Problemy wyglądały mniej więcej tak:
Fragment pogrubiony był przyczyną błędu niezadeklarowanego typu
źródło
jak inni wspominali dobrze iw tym wątku
użycie niepotrzebnych szybkich plików w „kopiowaniu zasobów pakietu”
źródło
Podobnie jak inne, był to jakiś niepowiązany kod, który powodował
@testable
nieprawidłowe działanie.W moim celu testowym był plik nagłówkowy Objective-C, który miał
@import ModuleUnderTest;
Usunąłem tę linię (bo import był właściwie niepotrzebny) i cudem
@testable
zacząłem znowu działać.Udało mi się tylko to wyśledzić, ale usunąłem wszystko z mojego projektu i dodawałem go krok po kroku, aż się nie udało. W końcu znalazłem problematyczny wiersz kodu.
źródło
jeśli dostęp do niej z różnych
module
lubTarget
wtedy po prostu trzeba gopublic
nimźródło
Na wypadek, gdyby ktoś popełnił ten sam głupi błąd, co ja ...
Otrzymałem ten błąd, ponieważ zmieniając nazwę pliku źródłowego, przypadkowo usunąłem
.
z nazwy pliku, więc kompilator potraktował plik jako zwykły plik tekstowy, a nie jako źródło do kompilacji.więc chciałem zmienić nazwę pliku na,
MyProtocol.swift
ale przypadkowo nazwałam goMyProtocolswift
To zwykły błąd, ale nie było od razu oczywiste, że tak się dzieje.
źródło
Niedodanie prawidłowego usunięcia importu może być również oczywistym brakiem. Dla mnie po prostu pominąłem importowanie PriorityUIKit.
źródło
Moja sytuacja jest taka, że przeciągam nowy plik XXView.swift do projektu. I zadeklaruj jako typ widoku XXView, a następnie błąd „użycie niezadeklarowanego typu…”.
Po prostu próbuję dodać mój XXView.swift do celu testowego, który rozwiązał błąd. Ale nie chciałem, aby moja klasa interfejsu użytkownika była zaangażowana w cel testowy.
Wreszcie znalazłem mój ViewController już w celu testowym, co nie powinno się zdarzyć. (Myślę, że ponieważ tworzę VC za pomocą xctemplate, dlatego automatycznie jest dołączany do celu testowego)
Usuwam kontroler widoku z celu testowego, a następnie mój XXView nie ma teraz potrzeby dodawania do celu testowego.
Wniosek: upewnij się, że wszystkie powiązane pliki powinny również odznaczyć cel testu.
źródło
Po spędzeniu godziny na tym błędzie stwierdziłem, że plik modułu jest zduplikowany. usuń dodatkowy plik i shift + cmd + k, aby wyczyścić, a błąd zniknął.
źródło
W moim przypadku problem polegał na tym, że nowy
class
nie został rozpoznany. Rozwiązałem problem, usuwając klasę i dodając ją ponownie, ale tym razem zaznaczającWatch App Extension
opcję podczas tworzenia nowej klasy.Należy pamiętać, że w mojej aplikacji mam rozszerzenie aplikacji Watch.
źródło
Target
.