我有这行Swift用于编译而没有问题
let layoutSettings = try LayoutSettings.deserialize(params: layoutSettingsParams as Dictionary<String, AnyObject?>)
从Xcode 8.3.2开始,我收到了错误
Swift编译器错误
由于信号命令失败:
分段错误:11
如果我删除代码行末尾的?
,则会毫无问题地编译。
如何在不崩溃编译器的情况下使用可空类型?
答案 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()的返回。在这两种情况下,如果您明确说明类型(即使根据应该推断的语言规则),它通常有助于编译器更快和/或不崩溃。在这些情况下,我认为它也有助于读者,因为如果编译器不能轻易推断出类型,那么人们通常不会在没有一些思考的情况下做到这一点。