是强制实践强制解除从UserDefaults检索的可选值,而不是使用guard /如果让它安全解包?

yes*_*joe 0 nsuserdefaults swift

许多在线教程似乎赞成使用if-letguard-let语句从UserDefaults中检索可选值.这有意义吗?我读到Apple打算让我们立即为UserDefaults提供默认值.

使用guard语句安全地解包这些值会导致更多代码,如果您的应用程序立即初始化这些值,这似乎是多余的.从UserDefaults强制解包值是否有任何缺点?

mat*_*att 5

nil当您提供的密钥未定义时,返回对于UserDefaults来说是完全合理的.此外,当你说object(forKey:)没有确定类型时从UserDefaults返回的值- 从Xcode 8种子6开始,它是一个Any.使用if/guard let是一种方法,在单个表达式中询问此值是否为非nil,如果是,则是否可以将其转换为您期望的类型,而不会出现崩溃的危险.因此,这是一个很好的方法.它不是力展开或强制铸造.它安全展开,安全铸造.如果失败,则条件失败,并且没有造成伤害.

力展开或强制铸造将涉及使用感叹号(!).当然,如果你绝对100%确定自己的理由,那么你完全可以自由地展开和强制施放.但请记住,感叹号的主要含义是"请让我崩溃!" 当你的假设结果出错时,你不会感到惊讶,而Swift就是你要求它做的事情.