【问题标题】:Weird class name conflict in Swift3 with Core DataSwift3 中奇怪的类名冲突与 Core Data
【发布时间】:2017-03-21 07:14:44
【问题描述】:

我正在使用 Core Data。这是类(由编辑器生成)。

public class Tag: NSManagedObject {

}

我定义了一个枚举,其大小写与上面的名称相同。

enum NoteListType {
    case Tag
    case Album
}

当我尝试构建它时,我收到了这个错误消息。

使用未声明的类型“标签”

当我 CMD 单击Tag 以跳转到其定义时,它显示了两个选项。请帮我。非常感谢。

更新:
我试图重命名枚举案例,但仍然得到undeclared type。可能是 Xcode 8.2.1 和 Core Data 造成的。 我已经在 Github 上发布了我的项目。这是link

【问题讨论】:

  • 符合命名约定——类和枚举名称以大写字母开头,枚举大小写以小写字母开头——可以解决问题。
  • 我无法重现这个。
  • @vadian 我知道这是在 Swift 3 中推荐的。但我的项目刚刚转换为 Swift 3。我会试试这个,谢谢!
  • 我没有收到任何错误

标签: ios swift core-data swift3


【解决方案1】:

我下载了你的 git 项目,发现这个冲突是因为每个文件的 Target Membership 都有实体和 Target 所以操作系统无法检测到哪个类被引用。我从 Entity (仅保留目标)中检查了成员资格,并且检测到了 Tag 、Album。虽然我无法运行代码,因为当您尝试在某些地方直接键入 cast NSManagedObject 时出现了一些编译团队错误。请参考下面的截图。

希望对你有所帮助。

【讨论】:

  • 有了你的回答,我终于解决了这个问题。谢谢!
【解决方案2】:

试试这个..

enum NoteListType {
    case tag
    case album
}

【讨论】:

  • 这很好,因为按照惯例,枚举大小写应该是小写的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2010-10-24
相关资源
最近更新 更多