Thinking in Swift 系列文章翻译1-1

第一篇附加:牺牲小马🐴

这里是原文地址 原文链接

本篇讲了一些可以用到! 强制解包的情况,是第一篇的一点附加。

1. IBOutlets + Dependency Injection

当使用OBoutlets 和 Dependency Injection(依赖注入)的时候,这两种情况下,会在初始化之后马上得到值。当你使用他们的时候,他们肯定不会是空。这时,可以使用强制解包。

2. UIImage, UIStoryboard, UITableViewCell

需要使用名字或者identifier这种常量去生成的。

UIImage(named: …)
UIStoryboard(name:,bundle:)
UIStoryboard.instantiateViewControllerWithIdentifier(_:)
UITableView.dequeueReusableCellWithIdentifier(_:, forIndexPath:)
// and some other similar stuff… 类似的情况

对这些情况,如果你想让你的程序崩溃,以便你提前发现去修复这些错误,如你bundle中没有该名字的图片,或者identifier没有设置或写错。

对这些情况,你可以使用guard的写法来提供更多的准确的信息来辅助你找到该错误

guard let cell = tableView.dequeueReusableCellWithIdentifier("foo", forIndexPath:indexPath) as? MyCustomCell else {
  fatalError("cell with identifier 'foo' and class 'MyCustomCell' not found. "
    + "Check that your XIB/Storyboard is configured properly.")
}
3.

本系列文章的第一部分更多的是面向Swift新手,因为他们总是强迫解包,因为Xcode告诉他们,或者因为他们没有真正理解为什么Optionals对他们有好处。这就是为什么我没有谈到那些我认为更加高级的用例。

所以可以在有些情况下使用!。但是,我仍然认为,第1部分的建议是:只用!如果你真的明白你为什么使用它的时候。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。