非空Swift数组能否安全强制解包.last属性?
关于Swift数组.last属性强制解包的安全性问题
我有一个来自SwiftData的元素数组,需要获取它的最后一个元素,这个数组有可能为空。想问:如果数组不为空,能不能安全地假设(进而强制解包).last属性?示例代码如下:
if myArray.isEmpty { print("some error") } else { print("\(myArray.last!) is definitely there") }
结论与解释
完全可以安全地进行强制解包,原因如下:
- Swift的
Array是值类型,在当前线程下,一旦通过isEmpty确认数组非空,只要没有后续代码(或异步操作)修改这个数组的内容,数组的元素数量就不会改变,last属性必然返回有效的非空值。 - 从
Array的类型定义来看,last仅会在数组为空时返回nil。既然已经通过isEmpty排除了空数组的场景,此时last不可能是nil,强制解包不会引发运行时崩溃。
可选的更优雅写法
虽然上述代码的强制解包是安全的,但也可以使用Swift推荐的可选绑定写法,无需单独检查isEmpty,代码更简洁直观:
guard let lastElement = myArray.last else { print("some error") return } print("\(lastElement) is definitely there")
内容的提问来源于stack exchange,提问作者Cécile Lebleu
相关产品推荐
相关产品推荐

