在Swift中“使用未声明的types”,尽pipetypes是内部的,并且存在于相同的模块中
我在我的模块中有一个types:
import Cocoa class ColoredDotView : NSView { ... }
它被用于许多不同的类,没有问题:
class EditSubjectPopoverController : NSObject { @IBOutlet internal var subjectColorDotView : ColoredDotView! ... }
但由于某种原因 ,当我在一个特定的类中使用它时,我在types上有编译错误:
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:使用未声明的types'ColoredDotView'
我不明白。 这是该文件中的第一个编译错误,其余的错误都是第一个的症状。 此外, 没有其他文件有编译错误。 我不明白为什么这个types是未声明的,因为这个文件在同一个模块中:
我已经尝试清理项目,清理生成文件夹,并重新启动Xcode,无济于事。 什么潜在的失误可以导致在Swift中undeclared type
编译器错误?
对于我来说,当我的testing目标没有一些swift文件,我的应用程序构build目标在编译源代码时,遇到了这个错误。 这是非常令人困惑的,因为“未申报的types”在其他许多地方被使用,没有任何问题,错误似乎是模糊的。 所以解决方法当然是将包含“未声明的types”的文件添加到testing目标。
@Craig Otis已经回答了这个问题,但是当问题类别不属于同一个目标时,通常是testing目标不见了。 只要确保以下checkbox被打勾。
编辑
查看目标成员资格 select你的文件,然后打开文件检查器(⌥+⌘+ 1)[ option ] + [ command ] + 1
唷,终于诊断出这个了。 不知何故 ,有问题的Swift文件EditTaskPopoverController.swift
处于两个不同的构build阶段。
它和其他所有的Swift文件一样,在Compile Sources
文件中也是如此 ,但也出于一些非常奇怪的原因,在Copy Bundle Resources
阶段,以及我所有的XIB和图像资源。
我不知道它是如何到达那里的,但是从额外的构build阶段中移除它解决了这个问题。
在XCode菜单中,Product-> Clean,然后Product-> Build为我工作。 在新的Group / Folder中添加新的ViewController到我的项目时遇到了这个问题。
对我来说,原因是一个函数的名字以一个types的相同字符开始:
@IBOutlet weak var tableView: CustomTableView!
在实现中我有一个以CustomTableView开头的函数
func CustomTableView(tableView: CustomTableView, dataForRow row: Int) -> NSData {...}
解决方法是更改函数签名,以便它不以types(CustomTableView)的相同字符开始,例如:
func dataForRow(row: Int, tableView: CustomTableView) -> NSData {...}
在我的情况下,这是一个非常误导性的错误信息。
在我的应用程序,我有应用程序委托和其他类需要作为公共testing访问。 如此处所述 ,然后将我的应用程序导入到我的testing中。
当我最近创build了两个新课程时,他们的testing目标是主要的和testing部分。 从testing中删除他们的成员解决了这个问题。
我有完全相同的问题。 我的框架中的一些文件无法从同一模块中的其他类访问。
出于某种原因,在Xcode中添加到框架中的文件不是编译源的一部分。 如果您的Swift文件不是编译源的一部分,您需要通过点击+并在popup窗口中select它们来添加它们。 截图1
还要确保该文件是框架目标的一部分。 (下面的截图中的小盒子应该检查) 截图2
如果有人遇到类似的问题,但编译源修复不能解决问题,重新启动Xcode可能(它对我来说)。 我的Xcode版本是Version 6.1 (6A1052d)
。
如果您的签名中有一个与对象types名称相同的函数,也会发生这种情况。 例如:
class func Player(playerObj: Player)
会导致编译器感到困惑(而且是这样),因为在查看其他文件之前,编译器将首先在本地查找文件。 所以它看着签名中的“玩家”,认为这不是这个范围内的一个对象,而是一个function,所以有些事情是错的。
也许这是为什么我不应该利用类function的一个很好的理由。 🙂
如果您偶然大写参数名称,并且将其称为与对象相同,也会发生这种情况。
class func didRecieveData(BlockItems: [BlockItems])
在我的情况是我犯了一个错误。 我添加了一个新的文件作为“OS X>源>cocoa类”,而不是“iOS>来源>cocoa触摸类”。
这可能有助于某人。
我用Core Data创build了一个名为“CoreData”的新testing项目。 不久,我有NSManagedObjectContext和其他核心数据类的“使用未声明的types”。 经过多次尝试导入,添加到生成阶段等。我已经删除了项目,并开始新的名为“TestingCoreData”,它都运作良好。
不要命名(testing)项目,如类的名称
我尝试了许多这里提供的解决scheme,但最终删除了该文件并重新创build了它,并且Xcode被模仿:/
在我的情况下,这是由于在下一行使用一个子类名称作为一个不同types的variables名称:
var binGlow: pipGlow = pipGlow(style: "Bin") var pipGlow: PipGlowSprite = PipGlowSprite()
请注意,在第1行中,pipGlow是SKShapeNode子类的名称,但在第二行中,我使用pipGlow作为variables名。 这不仅是糟糕的编码风格,而且显然是一个彻头彻尾的禁忌! 一旦我将第二行更改为:
var binGlow: pipGlow = pipGlow(style: "Bin") var pipGlowSprite: PipGlowSprite = PipGlowSprite()
我不再收到错误。 我希望这可以帮助别人!
我在Xcode 8中得到了这个错误信息,同时重构了框架中的代码,结果我忘了在框架中声明这个类作为public
也许你已经添加了一些“FirstNameClass”的类,然后手动重命名为“ColoredDotView”。 尝试将“ColoredDotView”类的内容复制到剪贴板,从项目中删除“ColoredDotView”并添加agin。
这个ID解决了类似的问题。
在我的情况下,我想添加一个自定义的swift对象作为types参数的方法,我给参数中的variables的名称是完全相同的自定义对象类的名称
问题是这样的:
func moveBlob(**blob** : blob){ ...code }
粗体字的部分造成未申报types的错误
正如其他人提到的,在这个线程
在“复制束资源”中使用不需要的swift文件
testing属于应用程序的Swift代码时,首先确保testing目标是将应用程序构build为依赖项。 然后,在您的testing中,将应用程序作为模块导入。 例如:
@testable import MyApplication
这将使得作为应用程序一部分的Swift对象可用于testing。
由于引用了一个名为.Int
枚举中的本地case
,导致Int
types.Int
func foo() { switch self { case .Int(var info): // ..... some other code } }
这里有错误someFuncWithInt(parameter: Int)
修正了someFuncWithInt(parameter: Swift.Int)