Wie teste ich, ob ein NSString
in Objective-C leer ist?
Antworten
Zu viele Anzeigen?Die Antwort von Marc ist richtig. Aber ich möchte die Gelegenheit nutzen, um auf Wil Shipleys verallgemeinerte isEmpty
die er auf seiner Website Blog :
static inline BOOL IsEmpty(id thing) {
return thing == nil
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}
Der erste Ansatz ist gültig, funktioniert aber nicht, wenn die Zeichenkette Leerzeichen enthält ( @" "
). Daher müssen Sie diese Leerzeichen vor dem Testen entfernen.
Dieser Code löscht alle Leerzeichen auf beiden Seiten der Zeichenkette:
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
Eine gute Idee ist es, ein Makro zu erstellen, damit Sie diese Monsterzeile nicht eintippen müssen:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
Jetzt können Sie es verwenden:
NSString *emptyString = @" ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
Eine der besten Lösungen, die ich je gesehen habe (besser als die von Matt G), ist diese verbesserte Inline-Funktion, die ich in einem Git Hub Repo gefunden habe (Wil Shipley's, aber ich kann den Link nicht finden):
// Check if the "thing" passed is empty
static inline BOOL isEmpty(id thing) {
return thing == nil
|| [thing isKindOfClass:[NSNull class]]
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}
- See previous answers
- Weitere Antworten anzeigen