在Objective-C中,当我有一个数组时
NSArray *array;
我想检查它是否不为空,我总是这样做:
if (array.count > 0) {
NSLog(@"There are objects!");
} else {
NSLog(@"There are no objects...");
}
这样一来,无需检查是否会array == nil
因为这种情况导致代码陷入该else
情况,以及非但nil
空数组都可以。
但是,在Swift中,我偶然发现了一个可选数组:
var array: [Int]?
而且我不知道要使用哪种条件。我有一些选择,例如:
选项A:nil
在相同条件下检查非用例和空用例:
if array != nil && array!.count > 0 {
println("There are objects")
} else {
println("No objects")
}
选项B:使用解除绑定数组let
:
if let unbindArray = array {
if (unbindArray.count > 0) {
println("There are objects!")
} else {
println("There are no objects...")
}
} else {
println("There are no objects...")
}
选项C:使用Swift提供的合并运算符:
if (array?.count ?? 0) > 0 {
println("There are objects")
} else {
println("No objects")
}
我不太喜欢选项B,因为我会在两种情况下重复执行代码。但是我不确定选项A和C是否正确,还是应该使用其他任何方式来做到这一点。
我知道可以根据情况避免使用可选数组,但是在某些情况下,可能有必要询问它是否为空。所以我想知道最简单的方法是什么。
编辑:
正如@vacawama指出的,这种简单的检查方法有效:
if array?.count > 0 {
println("There are objects")
} else {
println("No objects")
}
但是,我尝试的情况是仅当它为nil
空或为空时才想做一些特别的事情,然后继续执行该操作,而不管该数组是否包含元素。所以我尝试了:
if array?.count == 0 {
println("There are no objects")
}
// Do something regardless whether the array has elements or not.
并且
if array?.isEmpty == true {
println("There are no objects")
}
// Do something regardless whether the array has elements or not.
但是,当array为时nil
,它不会掉入if
体内。这是因为在这种情况下,array?.count == nil
and array?.isEmpty == nil
,因此表达式array?.count == 0
和array?.isEmpty == true
都计算为false
。
因此,我试图找出是否还有一种方法可以仅通过一个条件来实现这一目标。