«Использование необъявленного типа» в Swift, хотя тип является внутренним и существует в том же модуле

У меня есть тип в моем модуле:

import Cocoa class ColoredDotView : NSView { ... } 

Он используется в нескольких classах без проблем:

 class EditSubjectPopoverController : NSObject { @IBOutlet internal var subjectColorDotView : ColoredDotView! ... } 

Но по какой-то причине , когда я использую его в одном конкретном classе, у меня есть ошибки компиляции в типе:

 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?

Для меня я столкнулся с этой ошибкой, когда у моего тестового объекта не было быстрых файлов, которые моя цель создания приложения находилась в источниках компиляции. Это было очень запутанно, потому что «необъявленный тип» использовался во многих других местах без проблем, и ошибка казалась расплывчатой. Поэтому решение было, конечно, добавить файл, содержащий «необъявленный тип», в тестовый объект.

На это уже ответил @Craig Otis, но проблема возникает, когда рассматриваемые classы не принадлежат к одним и тем же целям, обычно отсутствует тестовая цель. Просто убедитесь, что отмечены следующие флажки.


целевое членство

редактировать

Чтобы увидеть целевое членство. Выберите файл, затем откройте инспектор файлов (⌥ + ⌘ + 1) [ опция ] + [ команда ] + 1

Подробное описание

Фу, наконец, поставил диагноз. Так или иначе , оскорбительный файл Swift EditTaskPopoverController.swift был в двух разных фазах сборки.

Это было в Compile Sources правильно, со всеми другими файлами Swift, но также по какой-то очень странной причине на этапе Copy Bundle Resources вместе со всеми моими ресурсами XIB и изображения.

Я понятия не имею, как он туда попал, но удаление его с дополнительной фазы сборки разрешило проблему.

В меню XCode Product-> Clean, а затем Product-> Build работал для меня. Я столкнулся с этой проблемой при добавлении нового ViewController в мой проект в новой группе / папке.

Причиной для меня было имя функции, которое начиналось с тех же символов, что и тип:

 @IBOutlet weak var tableView: CustomTableView! 

и в реализации у меня была функция, начинающаяся с CustomTableView

 func CustomTableView(tableView: CustomTableView, dataForRow row: Int) -> NSData {...} 

Исправление заключалось в изменении сигнатуры функции, чтобы она не начиналась с тех же символов, что и тип (CustomTableView), например:

 func dataForRow(row: Int, tableView: CustomTableView) -> NSData {...} 

Это было очень ошибочное сообщение об ошибке для фактической причины в моем случае.

У меня была точно такая же проблема. Некоторые из файлов в моей структуре не были доступны из других classов в одном модуле.

По какой-то причине файлы, которые были добавлены в инфраструктуру в Xcode, не были частью источников компиляции. Если ваш файл Swift не является частью источников компиляции, вам нужно добавить их, нажав кнопку + и выбрав их во всплывающем окне.

Скриншот 1

Также убедитесь, что файл является частью целевой среды. (Необходимо отметить маленькую коробку на скриншоте ниже)

Скриншот 2

В моем приложении у меня есть делегат приложения и другие classы, к которым тесты должны быть доступны как публичные. Как указано здесь , я затем импортирую свое приложение в свои тесты.

Когда я недавно создал два новых classа, их тестовые цели были и основными, и тестируемыми частями. Удаление их из их членства из тестов решило проблему.

В случае, если кто-то сталкивается с аналогичной проблемой, но исправление источников компиляции не решает проблему, перезапуск Xcode может (это сработало для меня). Моя версия Xcode – Version 6.1 (6A1052d) .

Это также может произойти, если вы случайно воспользуетесь именем параметра и назовите его так же, как и объект.

 class func didRecieveData(BlockItems: [BlockItems]) 

Я попробовал много предлагаемых решений, но в итоге удалил файл и снова создал его, а Xcode был смягчен: /

Это также может произойти, если у вас есть функция с тем же именем, что и тип объекта в вашей подписи. Например:

 class func Player(playerObj: Player) 

заставит компилятор запутаться (и это правильно), поскольку компилятор сначала будет искать локально внутри файла, прежде чем смотреть на другие файлы. Поэтому он смотрит на «Player» в подписи и думает, что это не объект в этой области, а функция, поэтому что-то не так.

Возможно, это хорошая причина, почему я не должен использовать функции classа. 🙂

Я получил это сообщение об ошибке в Xcode 8 при реорганизации кода в фреймворк, выясняется, что я забыл объявить class в рамках public

В моем случае была ошибка, допущенная мной. Я добавил новый файл как «OS X> Source> Cocoa Class» вместо «iOS> Source> Cocoa Touch Class».

Это может помочь кому-то.

Я создал новый тестовый проект с Core Data под названием CoreData. Вскоре у меня есть «Использование необъявленного типа» для classов NSManagedObjectContext и других classов Core Data. После нескольких попыток импорта, добавления фаз сборки и т. Д. Я удалил проект и начал новый, называемый «TestingCoreData», и все это сработало хорошо.

Не называйте (тестировать) проекты, такие как название classов

В моем случае это было вызвано тем, что имя подclassа используется в самой следующей строке как имя переменной с другим типом:

 var binGlow: pipGlow = pipGlow(style: "Bin") var pipGlow: PipGlowSprite = PipGlowSprite() 

Обратите внимание, что в строке 1 pipGlow является именем подclassа (SKShapeNode), но во второй строке я использовал pipGlow в качестве имени переменной. Это был не только плохой стиль кодирования, но, по-видимому, прямой и нет-нет! Как только я изменил вторую строку на:

 var binGlow: pipGlow = pipGlow(style: "Bin") var pipGlowSprite: PipGlowSprite = PipGlowSprite() 

Я больше не получил ошибку. Я надеюсь, что это помогает кому-то!

При тестировании кода Swift, который принадлежит к приложению, сначала убедитесь, что цель тестирования создает приложение как зависимость. Затем в своем тесте импортируйте приложение в виде модуля. Например:

@testable import MyApplication

Это создаст объекты Swift, которые являются частью приложения, доступного для теста.

Возможно, вы добавили class с некоторым «FirstNameClass» и после этого переименуете вручную в «ColoredDotView». Попробуйте скопировать содержимое classа «ColoredDotView» в буфер обмена, удалите «ColoredDotView» из проекта и добавьте аги.

Этот идентификатор исправляет аналогичную проблему у меня.

В моем случае я хотел добавить метод с пользовательским быстрым объектом в качестве параметра типа, а имя, которое я дал переменной в параметре, было точно таким же, как имя classа пользовательского объекта

Проблемы были примерно такими:

 func moveBlob(**blob** : blob){ ...code } 

Часть жирным шрифтом вызывала ошибку необъявленного типа

как хорошо говорили и в этой теме

использование ненужных быстрых файлов в “ресурсах связки копий” скриншот для помощи

Как и другие, это был @testable код, который вызывал @testable .

В моей тестовой цели был заголовок Objective-C, который

@import ModuleUnderTest;

Я удалил эту строку (потому что импорт был фактически ненужным), и чудесным образом @testable снова начал работать.

Я смог отслеживать это только, но удаляя все из моего проекта и добавляя его пополам, пока он не сработает. В конце концов я нашел проблемную строку кода.

В моем случае это было вызвано текстовым кодированием быстрых файлов. Один файл показал «No Explicit Encoding», и после преобразования в «UTF-8» проблема решена.

И причина, по которой текстовое кодирование файла не является явным, заключается в том, что я скопировал весь код из другого swift-файла.

Скриншот Noicit Encoding

введите описание изображения здесь

Скриншот UTF-8

введите описание изображения здесь

Произошла ошибка с типом Int , из-за ссылки на локальный case в моем перечислении, называемом .Int

func foo() { switch self { case .Int(var info): // ..... some other code } }

Там была ошибка someFuncWithInt(parameter: Int)

Исправлено это с помощью someFuncWithInt(parameter: Swift.Int)

  • Qt Creator - Project ERROR: Xcode настроен неправильно. Возможно, вам потребуется подтвердить лицензионное соглашение, запустив / usr / bin / xcodebuild
  • Храните iPhone Simulator в фоновом режиме во время выполнения тестов в Xcode?
  • Что такое статус чтения TIC 1:57 в iOS11 / Xcode 9?
  • Быстрые расширения протоколов
  • Xcode Project vs. Xcode Workspace - Различия
  • Как определить символ препроцессора в Xcode
  • «Запустить> Остановить на исключении Objective-C» в Xcode 4?
  • Обнаруживать, когда UIGestureRecognizer вверх, вниз, влево и вправо Cocos2d
  • Приложение Xcode 4.6.2 сбой при каждом втором запуске
  • Как сравнить один образ с другим, чтобы увидеть, похожи ли они на определенный процент, на iPhone?
  • Как узнать, сколько строк кода есть в проекте Xcode?
  • Давайте будем гением компьютера.