发布版本中的Swift链接器错误可通过添加代码来修复

时间:2016-09-08 00:57:39

标签: swift linker linker-errors xcode8

在Xcode 8中,我的Swift项目在调试模式下工作但在发布模式下无法链接:

Undefined symbols for architecture x86_64:
  "Swift.UnsafeMutableBufferPointer.(subscript.materializeForSet : (Swift.Int) -> A).(closure #1)"

我可以通过更改此行来修复错误:

let nextPeriod = currentSchedule.periods.filter({ $0.startDate > now }).sorted(by: { $0.startDate < $1.startDate }).first

为:

let nextPeriod = currentSchedule.periods.filter({ $0.startDate > now }).first

但这显然会改变我的应用的行为。幸运的是,我还可以通过将以下行添加到几乎任何方法,初始化程序或属性观察器来修复错误:

let _ = [""].sorted(by: {$0 < $1})

(我说“几乎”任何一个,因为在我自己定义的enum类型的属性上添加到属性观察者时似乎没有修复链接器错误。)

...什么?

3 个答案:

答案 0 :(得分:1)

起初我认为奇怪的代码苹果插入少数几个可比较的东西...但是当我添加它时没有用。有效的方法是将优化级别降低到:快速,单个文件优化 他们搞砸了这个xcode版本,故事板也有很大的问题。

答案 1 :(得分:1)

这是一个编译器错误,已在Xcode 8.1中修复。

答案 2 :(得分:0)

迁移到Swift 3时遇到同样的问题。

我通过让调用代码的对象继承自NSObject来实现它。