如何检测NSString在Objective-C里是否为空?
原问题:How do I test if a string is empty in Objective C?
天蓬老师2017-04-21 11:20:49
Marc Charbonneau
可以檢查是否[string length] == 0。這將檢查它是否是一個有效但是為空的字串(@"")以及其是否為無值。因為呼叫無值的length也會回傳0。
Matt G
樓上的答案是正確的。但我想藉此機會介紹一下Wil Shipley總結的isEmpty,他分享在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);
}
第一種方法是有效地,但是如果字串有空格(@" ")的話就買不起作用了。所以必須在測試前清除空格。
下面的程式碼能夠清除字串兩邊的所有空格
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
有個不錯的方法是定義一個宏,這樣你就不用輸入這一長串程式碼了:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
現在你可以使用:
NSString *emptyString = @" ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
Rob
我見過的最好的解決方法之一(比Matt G的更好)這種改進的內聯函數,我在Git Hub報告中找到的:
// Check if the "thing" pass'd 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);
}
user238824
你最好使用這個函數:
@implementation NSString (Empty)
- (BOOL) empty{
return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
}
@end
chown
另一個選擇是使用isEqualToString檢查是否等於@"",就像這樣:
if ([myString isEqualToString:@""]) {
NSLog(@"myString IS empty!");
} else {
NSLog(@"myString IS NOT empty, it is: %@", myString);
}
Jim Thio
我用的這個:
@implementation NSObject (AdditionalMethod)
-(BOOL) isNotEmpty
{
return !(self == nil
|| [self isKindOfClass:[NSNull class]]
|| ([self respondsToSelector:@selector(length)]
&& [(NSData *)self length] == 0)
|| ([self respondsToSelector:@selector(count)]
&& [(NSArray *)self count] == 0));
};
@end
問題是如果self無值, 這個功能就永遠不會被呼叫。它將返回false,這是所需的。
Samir Jwarchan
使用下面的if else條件之一就可以:
方法1:
<strong>if([yourString isEqualToString:@""]){
// yourString is empty.
}
else {
// yourString has some text on it.
} </strong>
方法 2:
if([yourString length] == 0){
// Empty yourString
}
else {
// yourString is not empty
}