知识卡片
隐式展开可空类型与推断的安全默认
内容
用T!声明的隐式展开可空类型,本质仍是可空类型,但访问时不需要展开语法,代价是如果实际为nil,访问会直接触发运行时崩溃——它把[[强制展开与可空实例绑定的安全性分野]]中!的风险固化进了声明本身。因此它只应在少数场景使用(如类两段式初始化中”这个属性一定会在初始化完成前被赋值”的情形)。更能体现Swift设计取向的是:把一个隐式展开可空实例赋给未显式标注类型的新常量时,编译器不会顺势把新常量也推成隐式展开可空类型,而是推断成更保守的普通可空类型T?——类型推断在不确定时始终偏向更安全的选项,除非开发者显式要求不安全的形式。
参考来源
《Swift编程权威指南》第8章《可空类型》