[ios] Objective-C에서 문자열이 비어 있는지 어떻게 테스트합니까?

NSStringObjective-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);
}