In Objective-C, wenn ich ein Array habe
NSArray *array;
und ich möchte überprüfen, ob es nicht leer ist, ich mache immer:
if (array.count > 0) {
NSLog(@"There are objects!");
} else {
NSLog(@"There are no objects...");
}
Auf diese Weise muss nicht überprüft werden, ob array == nil
der Code in dieser Situation in den else
Fall fällt, und ein nicht nil
leeres Array würde dies tun.
In Swift bin ich jedoch auf die Situation gestoßen, in der ich ein optionales Array habe:
var array: [Int]?
und ich bin nicht in der Lage herauszufinden, welche Bedingung zu verwenden ist. Ich habe einige Optionen, wie:
Option A: Überprüfen Sie sowohl nicht nil
als auch leere Fälle im selben Zustand:
if array != nil && array!.count > 0 {
println("There are objects")
} else {
println("No objects")
}
Option B: Lösen Sie die Bindung des Arrays mit 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...")
}
Option C: Verwenden des von Swift bereitgestellten Koaleszenzoperators:
if (array?.count ?? 0) > 0 {
println("There are objects")
} else {
println("No objects")
}
Ich mag die Option B nicht sehr, weil ich Code unter zwei Bedingungen wiederhole. Ich bin mir jedoch nicht sicher, ob die Optionen A und C korrekt sind oder ob ich eine andere Methode verwenden sollte.
Ich weiß, dass die Verwendung eines optionalen Arrays je nach Situation vermieden werden kann, aber in einigen Fällen kann es erforderlich sein, zu fragen, ob es leer ist. Ich würde gerne wissen, wie es am einfachsten geht.
BEARBEITEN:
Wie @vacawama betonte, funktioniert diese einfache Art der Überprüfung:
if array?.count > 0 {
println("There are objects")
} else {
println("No objects")
}
Ich habe jedoch den Fall ausprobiert, in dem ich etwas Besonderes nur dann tun möchte, wenn es nil
leer oder leer ist, und dann fortfahren möchte, unabhängig davon, ob das Array Elemente enthält oder nicht. Also habe ich versucht:
if array?.count == 0 {
println("There are no objects")
}
// Do something regardless whether the array has elements or not.
Und auch
if array?.isEmpty == true {
println("There are no objects")
}
// Do something regardless whether the array has elements or not.
Aber wenn Array ist nil
, fällt es nicht in den if
Körper. Und das liegt daran, dass in diesem Fall array?.count == nil
und array?.isEmpty == nil
so die Ausdrücke array?.count == 0
und array?.isEmpty == true
beide ausgewertet werden false
.
Ich versuche also herauszufinden, ob es eine Möglichkeit gibt, dies auch mit nur einer Bedingung zu erreichen.