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

Swift linker error in release build fixable by adding code

在Xcode8中,我的一个Swift项目在Debug模式下工作,但在Release模式下link失败:

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

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

let nextPeriod = currentSchedule.periods.filter({ [=12=].startDate > now }).sorted(by: { [=12=].startDate < .startDate }).first

至:

let nextPeriod = currentSchedule.periods.filter({ [=13=].startDate > now }).first

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

let _ = [""].sorted(by: {[=14=] < })

(我说 "almost" any 是因为它似乎没有修复 linker 错误,当添加到 属性 属性的观察者时,我定义了 enum 类型我自己。)

...什么?

我在迁移到 Swift 的一个项目中使用 sorted(by: 方法时遇到了同样的问题 3.

这似乎是编译器中的一个错误,我发现了以下参考资料:

目前唯一对我有用的解决方法是在构建设置中将 swift 编译器优化级别更改为 None

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

我通过让调用代码的对象继承自 NSObject 使其工作。

起初我以为是奇怪的苹果代码插入了一些具有可比性的东西......但是当我把它加回去时没有用。有效的是将优化级别降低到:快速,单个文件优化 他们搞砸了这个 xcode 版本,故事板也有很大的问题。

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