使用 NSUserDefaults 时 Swift 中出现奇怪的编译错误

Weird Compile Error In Swift When Using NSUserDefaults

我已经看到了很多关于这个的问题,但我仍然对正在发生的事情感到困惑。

讨厌 责怪语言或编译器,但是,Swift,这是一个明确的可能性。

当我在调试模式下构建并 运行 时,世界一切正常。

但是,当我在发布模式下编译时,编译器出现以下错误:

"Bitcast requires both operands to be pointer or neither"...Yadda, yadda

违规行似乎是这一行:

let lastURI:AnyObject? = NSUserDefaults.standardUserDefaults().valueForKey(s_currentURIKey)

It's right here,如果你想在你的课本中跟着学习(这是一个开源项目)。

如果我注释掉这一行(以及它下面的 7 行),那么阳光明媚,鸟儿快乐地鸣叫。如果我把它留在里面,那么乌云和成群的兽人就会从魔多喷涌而出。

为了让它失败,我只是 运行 分析器,它在发布模式下编译。

有没有人对这种激动有任何经验?

此问题的所有其他版本都倾向于解决特定 Cocoa API 调用的问题。我不清楚是不是用户有错。

我真的希望这是我的错,这意味着我可以做些什么。

如果这不是我的错,那么我需要提交一个 RADAR 问题,并留出长长的灰色胡须,然后才能使用分析器测试此应用程序。

它还需要一段时间才能发布,但我喜欢尽早在发布模式下测试我的应用程序。

好的。这是我的发现。

我有一个元组数组作为变量:

var arrayOfTuples:[(greeting: String, query: String)]! = []

我使用 += 和单个元素数组附加到它,如下所示:

arrayOfTuples += [(greeting: "HI", query: "HOWAYA")]

这在调试模式下工作和编译良好,但在发布模式下导致奇怪的错误。

我通过将“+=”替换为“.append()”来修复它,如下所示:

arrayOfTuples.append((greeting: "HI", query: "HOWAYA"))

算了吧。无论如何,附加更合适,因此良好的编码习惯占上风。