使用枚举时实现NSObject协议时链接器错误?

时间:2015-02-13 16:04:31

标签: ios swift enums linker linker-errors

以下是我在Swift中遇到问题的代码的简化版本:

enum E {
  case C
}

class Test: NSObject {
  var v: E = .C
}

当我尝试构建时,出现以下错误:

Undefined symbols for architecture x86_64:
  "__TWvdvC8TestTest4Test1vOS_1E", referenced from:
      __TFC8TestTest4Testm1vOS_1E in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

要重现这一点,只需创建一个新的Swift项目并将上面的代码粘贴到“AppDelegate.swift”中。或者,创建一个新文件并将其粘贴在那里!

我错过了一些明显的东西,还是这是另一个Swift错误?我确实尝试删除所有派生数据和其他形式的伏都魔法。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

如果只有一个案例,编译器似乎删除了枚举?

我可以重现你的问题,当我添加第二个案例时它会消失:

enum E {
  case C,D
}

class Test: NSObject {
   var v : E = .C
}

答案 1 :(得分:1)

尝试这个时我发现了几件事:

  1. 在当前非测试版的Xcode中,我看到了你所指的错误(几乎可以肯定是一个Swift错误)。但是,如果我在枚举(case C,D)中添加一个额外的值,它就可以很好地编译
  2. 我无法在最新的Xcode测试版(版本6.3(6D520o))中重现崩溃,这让我相信该错误已在Swift 1.2中得到修复