当前位置: 首页 > 面试题库 >

即使类型是内部的,并且存在于同一模块中,在Swift中也“使用未声明的类型”

张坚白
2023-03-14
问题内容

我的模块中有一个类型:

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 typeSwift中的编译器错误?


问题答案:

ew,终于诊断出来了。 不知何故 ,令人讨厌的Swift文件EditTaskPopoverController.swift处于两个不同的构建阶段。

这是在Compile Sources正确的,与所有其他雨燕的文件,但它 为一些很奇怪的原因,在Copy Bundle Resources阶段以及与所有我的XIB和图像资源一起。

我不知道它是如何到达那里的,但是从额外的构建阶段中删除它可以解决此问题。



 类似资料:
  • 我有以下代码: 我编译此文件时出错: 但是,删除内部模块并编译它本身包含的代码运行良好: 我错过了什么?如果模块位于单独的文件中,我会收到相同的错误: main.rs a.rs

  • 问题内容: Xcode 8 beta 4不再识别Foundation类。 我在一个简单的操场示例中复制了它: 由于在较早的Xcode 8 Swift 3 Beta中可用,我想这是一个需要修复的错误,而不是Playground中的某些源代码错误? 问题答案: 尽管未在Xcode发行说明中记录,但Swift Foundation中对Swift进化建议SE-0086 Drop NS Prefix 的第2

  • 3. 我不想在我的API中传递所有的参数作为请求体,有些只有查询、变量、输入有些只有查询和变量,就像上面的json数据,我想创建相同的模型,可以在其余的API中使用。目前,我已经为每个API创建了不同的模型。 公共类CreatetRequest{ } 这里我在所有API中复制了我的模型,所以我想创建三个模型类,其中包含所有必需的变量,这些变量在我的引导应用程序中都是常见的,但同时我必须避免在res

  • 问题内容: 假设我有一个通用类: 这些声明之间有什么区别? 问题答案: 没有泛型参数就不能存在泛型类型,因此省略泛型类型意味着您希望编译器推断该类型。 在这种情况下,要推断的逻辑类型为。 请注意,这仅适用于您使用了内部声明。它不适用于其他泛型类。 可以在变量声明中使用类似的通用参数推断:

  • 我是Angular 2和TypeScript的新手,我正在尝试遵循最佳实践。 我试图创建一个TypeScript类,而不是使用简单的JavaScript模型({ })。 但是,Angular 2好像不喜欢。 我的代码是: 我将其用作: 我收到来自 Angular 的错误: 异常:无法解析testWidget的所有参数:(?). 所以我想,模型还没有定义...我把它移到最上面! 除了现在我得到例外:

  • 问题内容: 在Swift编程语言中,它说“一个数组在一个有序列表中存储相同类型的多个值”。但是我发现您可以在数组中存储多种类型的值。描述不正确吗? 例如 问题答案: 来自REPL 您可以看到的是,这是或 发生的事情是提供了将数字和布尔值转换为的能力。需要编译代码时,编译器将执行转换。 因此,它们现在具有的通用类型,因此可以推断为 没有,您的代码将无法在REPL中编译。 但是你可以做到 因为它们具有