`?`在Xcode 8.3.2的Swift编译器中导致分段错误

时间:2017-04-24 16:44:18

标签: swift xcode

我有这行Swift用于编译而没有问题

let layoutSettings = try LayoutSettings.deserialize(params: layoutSettingsParams as Dictionary<String, AnyObject?>)

从Xcode 8.3.2开始,我收到了错误

  

Swift编译器错误
    由于信号命令失败:
    分段错误:11

如果我删除代码行末尾的?,则会毫无问题地编译。

如何在不崩溃编译器的情况下使用可空类型?

1 个答案:

答案 0 :(得分:1)

AnyObject AnyObject?不是一回事。 AnyObject?实际上是 Optional&lt;的语法糖AnyObject&gt; 。它用 Dictionary&lt;编译的事实String,AnyObject&gt; 但不是 Dictionary&lt; String,AnyObject? &gt; 表示字典&lt; String,AnyObject&gt; 或[String:AnyObject]是正确的类型,或者可以转换为正确的类型。通常,swift编译器偶尔会出现类型推断问题,导致它崩溃或编译速度非常慢。我最经常注意到字典和.map()的返回。在这两种情况下,如果您明确说明类型(即使根据应该推断的语言规则),它通常有助于编译器更快和/或不崩溃。在这些情况下,我认为它也有助于读者,因为如果编译器不能轻易推断出类型,那么人们通常不会在没有一些思考的情况下做到这一点。