知识卡片

强制展开与可空实例绑定的安全性分野

专业/工作 · 743.a

内容

访问可空实例(Optional)里的值有两条路:用!强制展开,无论有没有值都直接取,若实际为nil会触发运行时崩溃;或用if let x = optional做可空实例绑定,只有确认有值时才把值绑定到临时常量、进入对应代码分支,没有值就走另一支,不会崩溃。这两条路径是[[可空类型把缺失值收编进类型系统]]之后必然要面对的下一步问题——拿到一个可能没有值的容器,该如何安全取出里面的值。多个可空实例可以在同一个if let里用逗号连续绑定并附加where式的布尔条件,只有全部成功才进入分支体,避免层层嵌套的”末日金字塔”。二者的取舍很直接:!是把”我确信这里一定有值”的判断权交给写代码那一刻的自己,if let是把判断权交给运行时的实际状态——书中明确建议默认用后者,只有在没有值时崩溃就是唯一合理结果时才用!

参考来源

《Swift编程权威指南》第8章《可空类型》