У меня есть тип в моем модуле:
import Cocoa
class ColoredDotView : NSView {
...
}
Он используется в нескольких разных классах без проблем:
class EditSubjectPopoverController : NSObject {
@IBOutlet internal var subjectColorDotView : ColoredDotView!
...
}
Но по какой-то причине , когда я использую его в одном конкретном классе, у меня возникают ошибки компиляции по типу:
class EditTaskPopoverController : NSObject {
@IBOutlet internal var lowPriorityDotView : ColoredDotView! // Error here
@IBOutlet internal var medPriorityDotView : ColoredDotView! // And here...
@IBOutlet internal var highPriorityDotView : ColoredDotView! // And here...
...
}
Ошибка компиляции:
EditTaskPopoverController.swift: 15: 49: использование необъявленного типа 'ColoredDotView'
Что я не понимаю. Это первая ошибка компиляции в файле, а остальные ошибки являются симптомами первой. Далее нет других файлов с ошибками компиляции. Я не понимаю, почему тип не объявлен, так как файл находится в том же модуле:
Я попытался очистить проект, очистить папку сборки и перезапустить Xcode, но безрезультатно. Какие возможные ошибки могут вызвать undeclared type
ошибку компилятора в Swift?
var
объявления и перехожу к проходящей сборке. Затем я добавляю одну из деклараций вверху, и ошибка немедленно возвращается: imgur.com/VUUBK2KОтветы:
Для меня я столкнулся с этой ошибкой, когда у моей тестовой цели не было некоторых быстрых файлов, которые были у моей целевой сборки при создании исходных текстов. Это очень сбивало с толку, потому что «необъявленный тип» использовался во многих других местах без проблем, и ошибка казалась расплывчатой. Поэтому решением было, конечно, добавить файл, содержащий «необъявленный тип», к цели теста.
источник
@Craig Otis уже ответил на этот вопрос, но проблема возникает, когда рассматриваемые классы не принадлежат к одной и той же цели, обычно цель теста отсутствует. Просто убедитесь, что установлены следующие флажки.
редактировать
Чтобы увидеть целевое членство. Выберите файл, затем откройте инспектор файлов (⌥ + ⌘ + 1) [ опция ] + [ команда ] + 1
источник
Фу, наконец-то диагностировали это. Каким-то образом поврежденный файл Swift
EditTaskPopoverController.swift
находился в двух разных фазах сборки.Это было
Compile Sources
правильно, со всеми остальными файлами Swift, но также , по какой-то очень странной причине, вCopy Bundle Resources
фазе, вместе со всеми моими ресурсами XIB и изображений.Я понятия не имею, как он туда попал, но удаление его из дополнительной фазы сборки решило проблему.
источник
В меню XCode Product-> Clean и затем Product-> Build у меня сработало. Я столкнулся с этой проблемой, когда добавил новый ViewController в мой проект в новой группе / папке.
источник
У меня была точно такая же проблема. Некоторые из файлов в моей структуре не были доступны из других классов в том же модуле.
По некоторым причинам файлы, которые были добавлены к платформе в XCode, не были частью Источников Компиляции. Если ваш файл Swift не является частью исходников компиляции, вам нужно добавить их, нажав + и выбрав их во всплывающем окне.
Также убедитесь, что файл является частью целевой платформы. (Маленькая клеточка на скриншоте ниже должна быть отмечена)
источник
Причиной для меня было имя функции, которое начиналось с тех же символов, что и тип:
и в реализации у меня была функция, начинающаяся с CustomTableView
Исправление состояло в том, чтобы изменить сигнатуру функции так, чтобы она не начиналась с тех же символов, что и тип (CustomTableView), например:
Это было очень вводящее в заблуждение сообщение об ошибке по фактической причине в моем случае.
источник
В случае, если кто-то сталкивается с подобной проблемой, но исправление Источники компиляции не решает проблему, перезапуск Xcode может (это работало для меня). Моя версия Xcode есть
Version 6.1 (6A1052d)
.источник
В моем приложении есть делегат приложения и другие классы, к которым тесты должны обращаться как общедоступные. Как показано здесь , я затем импортирую свое приложение в свои тесты.
Когда я недавно создал два новых класса, их цели тестирования были как основной, так и тестовой частью. Удаление их из их членства от тестов решило проблему.
источник
В моем случае исходные тексты компиляции TestTarget содержали файлы из главной цели .
Ref :
Почему это происходит?
Это происходит, так как мы проверяем связь TestTarget при создании файла
Или вручную проверяя эту опцию у инспектора.
Ref :
Как я решил?
источник
источник
Я перепробовал многие из предложенных здесь решений, но в конце концов удалил файл и создал его снова, и Xcode был смягчен: /
источник
Это также может произойти, если вы случайно прописали имя параметра и назвали его так же, как объект.
источник
Это может кому-то помочь.
Я создал новый тестовый проект с Core Data под названием «CoreData». Вскоре я получил «Использование необъявленного типа» для NSManagedObjectContext и других базовых классов данных. После нескольких попыток импорта, добавления в фазы сборки и т. Д. Я удалил проект и запустил новый, названный «TestingCoreData», и все это работало хорошо.
Не называйте (тестируйте) проекты, такие как название классов
источник
Это также может произойти, если в вашей подписи есть функция с тем же именем, что и тип объекта. Например:
приведет к тому, что компилятор будет сбит с толку (и это справедливо), так как компилятор сначала будет смотреть локально в файле, а потом смотреть на другие файлы. Поэтому он смотрит на «Player» в подписи и думает, что это не объект в этой области, а функция, поэтому что-то не так.
Возможно, это хорошая причина, почему я не должен использовать функции классов с большой буквы. :)
источник
Я получил это сообщение об ошибке в Xcode 8 во время рефакторинга кода в платформу, выходит, что я забыл объявить класс в платформе как
public
источник
Возможно, вы добавили класс с некоторым «FirstNameClass» и после этого вручную переименуйте в «ColoredDotView». Попробуйте скопировать содержимое класса «ColoredDotView» в буфер обмена, удалите «ColoredDotView» из проекта и добавьте agin.
Этот идентификатор исправляет подобную проблему от меня.
источник
В моем случае была допущена ошибка. Я добавил новый файл как «OS X> Source> Cocoa Class» вместо «iOS> Source> Cocoa Touch Class».
источник
В моем случае это было вызвано тем, что имя подкласса использовалось в следующей строке как имя переменной другого типа:
Обратите внимание, что в строке 1 pipGlow - это имя подкласса (SKShapeNode), но во второй строке я использовал pipGlow в качестве имени переменной. Это был не только плохой стиль кодирования, но, по-видимому, просто нет-нет! Как только я изменю вторую строку на:
Я больше не получил ошибку. Я надеюсь, что это поможет кому-то!
источник
При тестировании кода Swift, принадлежащего приложению, сначала убедитесь, что цель тестирования строит приложение как зависимость. Затем в своем тесте импортируйте приложение как модуль. Например:
@testable import MyApplication
Это сделает объекты Swift, являющиеся частью приложения, доступными для теста.
источник
В моем случае это было вызвано текстовой кодировкой быстрых файлов. Один файл показывал «Нет явного кодирования», и после преобразования его в «UTF-8» проблема решена.
И причина, по которой текстовая кодировка файла не является явной, заключается в том, что я скопировал весь код из другого файла swift.
Скриншот без явного кодирования
Скриншот UTF-8
источник
Очистка проекта решила мою проблему.
Шаги: Продукт -> Очистить (или Shift + Cmd + K)
источник
В моем случае я хотел добавить метод с настраиваемым объектом swift в качестве параметра типа, и имя, которое я дал переменной в параметре, было точно таким же, как и имя класса настраиваемого объекта
Проблемы были примерно такими:
Часть, выделенная жирным шрифтом, вызывала ошибку необъявленного типа
источник
как и другие упоминали хорошо и в этой теме
использование ненужных файлов swift в «ресурсах копирования комплекта»
источник
Как и другие, это был какой-то не связанный код, который вызывал
@testable
сбои в работе.В моей цели теста был заголовочный файл Objective C, который имел
@import ModuleUnderTest;
Я удалил эту строку (потому что импорт был фактически не нужен) и чудесным образом
@testable
снова начал работать.Я мог только отследить это, но удалял все из моего проекта и добавлял его постепенно, пока не потерпел неудачу. В конце концов я нашел проблемную строку кода.
источник
если вы обращаетесь к нему из разных
module
илиTarget
тогда вам просто нужно это кpublic
немуисточник
В случае, если кто-то совершит ту же глупую ошибку, что и я ...
Я получаю эту ошибку, потому что при переименовании исходного файла я случайно удалил
.
из имени файла, и поэтому компилятор рассматривал этот файл как простой текстовый файл, а не как исходный файл для компиляции.поэтому я хотел переименовать файл,
MyProtocol.swift
но случайно назвал егоMyProtocolswift
Это простая ошибка, но было не совсем очевидно, что это происходит.
источник
Неправильное добавление импортной разметки также может быть очевидной ошибкой. Для меня я просто пропустил импорт PriorityUIKit.
источник
Моя ситуация такова, что я перетаскиваю новый файл XXView.swift в проект. И объявить тип View как XXView, а затем ошибку «использование необъявленного типа ....».
Я просто пытаюсь добавить свой XXView.swift к цели теста, в которой он решил ошибку. Но я не хотел, чтобы мой класс пользовательского интерфейса участвовал в тестировании.
Наконец, я обнаружил, что мой ViewController уже находится в тестовой цели, чего не должно быть. (Я думаю, потому что я создаю VC с помощью xctemplate, поэтому он автоматически включается в цель теста)
Я удаляю контроллер вида из контрольной цели, и теперь мой XXView больше не нужно добавлять в контрольную цель.
Вывод: убедитесь, что все ваши связанные файлы также не отмечены цели теста.
источник
Потратив час на эту ошибку, я обнаружил, что файл модуля продублирован. удалите лишний файл, и Shift + CMD + K для очистки и ошибка исчезла.
источник
В моем случае проблема была в том, что новый
class
не был распознан. Я решил проблему, удалив класс и повторно добавив его, но на этот раз проверивWatch App Extension
опцию при создании нового класса.Обратите внимание, что в моем приложении есть расширение приложения Watch.
источник
Target
.