Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
NSString - Vergleichen

In Programmen ist es sehr oft nötig, verschiedene Texte miteinander zu vergleichen. Dabei gibt es aber etwas ,das man auf keinen Fall tun sollte.
NSString *text1 = @"Bestellung";
NSString *text2 =
@"Lieferung";

if( text1 == text2 )
{
    NSLog(
@"gleich");
}
else
{
    NSLog(
@"ungleich");
}
Dieser Vergleich, obwohl er auf den ersten Blick richtig aussehen mag, vergleicht nicht zwei Texte, sondern zwei Objekte. So etwas möchte man in den seltensten Fällen, meistens soll wirklich der Textinhalt verglichen werden und dafür ist eine etwas andere Abfrage nötig.
NSString *text1 = @"Bestellung";
NSString *text2 =
@"Lieferung";

if([text1 isEqualToString:text2] == TRUE)
{
    NSLog(
@"gleich");
}
else
{
    NSLog(
@"ungleich");
}
Die Methode isEqualToString vergleicht, ob zwei Texte identisch sind. Als Alternative dazu könnte man auch die Methode compare verwenden. Diese dient eigentlich der Sortierung, aber wenn zwei Texte den gleichen Inhalt haben, ist das Resultat NSOrderedSame, was besagt, dass beide Texte identisch sind.
NSString *text1 = @"Bestellung";
NSString *text2 =
@"Lieferung";

if([text1 compare:text2] == NSOrderedSame)
{
    NSLog(
@"gleich");
}
else
{
    NSLog(
@"ungleich");
}
Ist die Groß- und Kleinschreibung der Texte nicht relevant, empfiehlt sich folgender Vergleich, den man als Variante von compare verstehen kann.
NSString *text1 = @"Bestellung";
NSString *text2 =
@"bestellunG";

if([text1 caseInsensitiveCompare:text2] == NSOrderedSame)
{
    NSLog(
@"gleich");
}
else
{
    NSLog(
@"ungleich");
}
Das Resultat eines solchen Vergleiches ist immer ein NSComparisonResult, hinter dem sich eigentlich eine Zahl verbirgt. Die Zahl 0, im Fall von NSOrderedSame. NSOrderedAscending ist -1 und NSOrderedDescending ist 1.

Sie können sich die Definition dieser Zahlen sogar im Programmcode ansehen. Klicken Sie mit der sekundären Maustaste auf den Bezeichner NSComparisonResult und wählen Sie aus dem Kontextmenü den Eintrag Jump to Definition. Sie werden sich in der NSObjCRuntime.h Datei wieder finden. Achten Sie auf folgende Zeile:
enum _NSComparisonResult {NSOrderedAscending = -1, NSOrderedSame,
     NSOrderedDescending};
Mit Hilfe eines NSComparisonResult können Sie nicht nur Texte vergleichen, sondern auch sortieren.
NSString *text1 = @"xyz";
NSString *text2 =
@"abc";

if([text1 caseInsensitiveCompare:text2] == NSOrderedAscending)
{
    NSLog(
@"%@ kommt vor %@", text1, text2);
}
else
{
    NSLog(
@"%@ kommt vor %@", text2, text1);
}
Experimentieren Sie mit diesem Code. Probieren Sie verschiedene Texte, auch mit unterschiedlichen Längen. Sie werden schnell verstehen wie diese Methoden arbeiten.

Versuchen Sie auch mal folgende Werte:
NSString *text1 = @"20";
NSString *text2 =
@"100";
Sie sollten Sich vor Augen halten, dass die Texte auf der Basis des Alphabet verglichen werden, und da kommt die 1 nun mal vor der 2. Das Ergebnis ist zwar richtig, aber in den seltensten Fällen das gewünschte Resultat. Abhilfe schafft die Option NSNumericSearch.
NSString *text1 = @"20";
NSString *text2 =
@"100";

if([text1 compare:text2 options:NSNumericSearch] == NSOrderedAscending)
{
    NSLog(
@"%@ kommt vor %@", text1, text2);
}
else
{
    NSLog(
@"%@ kommt vor %@", text2, text1);
}
Diese Option funktioniert auch, wenn die Zahlen nur Teil der gesamten Zeichenkette sind. Für eine korrekte Sortierung ist es aber zwingend notwendig, dass die Textanteile gleich sind.
NSString *text1 = @"Anzahl 20";
NSString *text2 =
@"Anzahl 100";
Unterscheiden sich aber auch die Texteanteile, sieht das Resultat wieder ganz anders aus.
NSString *text1 = @"B 20";
NSString *text2 = @"A 100";