如果任务只是解开值,我不明白创建无用常量的概念:
guard let foo = foo else { return }
Run Code Online (Sandbox Code Playgroud)
与
guard foo != nil else { return }
Run Code Online (Sandbox Code Playgroud)
这些说法有什么区别?不使用后者的原因是什么?
下面是一些使用guard let的例子:
var array: [String] = ["pineapple", "potato", "corn"]
guard let lastElement = array.last, lastElement == "corn" else { return false }
Run Code Online (Sandbox Code Playgroud)
并且不使用let:
guard array.last == "corn" else { return false }
Run Code Online (Sandbox Code Playgroud)
难道我不能采用第二种方法,因为它更干净、更简单,而且内存效率更高?
通过您的第一个示例,foo成为非可选。所以,你可以这样做:
guard let foo = foo else { return }
foo.doMethod()
Run Code Online (Sandbox Code Playgroud)
尽管没有可选绑定,您仍然有一个可选:
guard foo != nil else { return }
foo?.doMethod()
Run Code Online (Sandbox Code Playgroud)
很多时候,使用非可选值更容易处理,包括能够避免使用 强制展开!,因此第一个代码示例具有很多实用性。
就第二个版本而言,您可以在想要进行检查的地方使用它nil,但实际上可能不会在您检查的范围内使用该值。
在带有 type 数组的示例中[String],是的,您可以进行第二次比较,而无需可选绑定来检查是否存在元素last:
guard array.last == "corn" else { return false }
Run Code Online (Sandbox Code Playgroud)
你是对的,这样更干净。不过,正如您推测的那样,它不太可能更加“内存有效”,因为编译器可能会优化掉临时可选绑定。
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |