NSString
Objective-C에서가 비어 있는지 어떻게 테스트 합니까?
답변
여부를 확인할 수 있습니다 [string length] == 0
. nil을 호출 length
하면 0이 반환 되므로 유효하지만 빈 문자열 (@ “”)인지 nil인지 확인합니다 .
답변
마크의 대답은 맞습니다. 그러나 나는이 기회를 통해 Wil Shipley의 일반화 된 블로그isEmpty
에 대한 포인터를 포함시킬 것입니다 .
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!");
답변
내가 본 최고의 솔루션 중 하나 (Matt G보다 낫다)는 Git Hub 저장소 (Willey의 솔루션이지만 링크를 찾을 수 없음)에서 가져온이 향상된 인라인 기능입니다.
// 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);
}
답변
이 카테고리를 더 잘 사용해야합니다.
@implementation NSString (Empty)
- (BOOL) isWhitespace{
return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
}
@end
답변
나는 이것을 넣었다.
@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가 nil이면이 함수가 호출되지 않는다는 것입니다. 원하는 false를 반환합니다.
답변
이 같은 경우는 또 다른 옵션은 확인하는 것입니다 @""
와 isEqualToString:
이렇게 같은 :
if ([myString isEqualToString:@""]) {
NSLog(@"myString IS empty!");
} else {
NSLog(@"myString IS NOT empty, it is: %@", myString);
}