objective-c - 如何检测字符串在Obj-C里是否为空?
大家讲道理
大家讲道理 2017-04-21 11:18:49
0
1
526

如何检测NSString在Objective-C里是否为空?

原问题:How do I test if a string is empty in Objective C?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(1)
Peter_Zhu

Marc Charbonneau
Anda boleh menyemak sama ada [panjang rentetan] == 0. Ini akan menyemak sama ada ia adalah rentetan yang sah tetapi kosong (@"") dan jika ia adalah batal. Kerana panjang panggilan tanpa nilai juga akan mengembalikan 0.


Matt G
Jawapan di atas adalah betul. Tetapi saya ingin mengambil kesempatan ini untuk memperkenalkan isEmpty yang diringkaskan oleh Wil Shipley, yang dikongsikannya di blognya:

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

Kaedah pertama berkesan, tetapi ia tidak akan berfungsi jika rentetan mempunyai ruang (@" "). Jadi ruang mesti dibersihkan sebelum ujian.
Kod berikut mengalih keluar semua ruang pada kedua-dua belah rentetan

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

Idea yang baik adalah untuk menentukan makro supaya anda tidak perlu menaip rentetan kod yang panjang ini:

#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]

Kini anda boleh menggunakan:

NSString *emptyString = @"   ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");

Rob
Salah satu penyelesaian terbaik yang saya lihat (lebih baik daripada Matt G) ialah fungsi sebaris yang dipertingkatkan ini, yang saya temui dalam laporan 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);
}

pengguna238824
Anda lebih baik menggunakan fungsi ini:

@implementation NSString (Empty)

    - (BOOL) empty{
        return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
    }

@end

chown
Pilihan lain ialah menggunakan isEqualToString untuk menyemak sama ada ia sama dengan @"", seperti ini:

if ([myString isEqualToString:@""]) {
    NSLog(@"myString IS empty!");
} else {
    NSLog(@"myString IS NOT empty, it is: %@", myString);
}

Jim Thio
Yang ini saya gunakan:

@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 

Masalahnya ialah jika diri tidak mempunyai nilai, fungsi ini tidak akan dipanggil. Ia akan mengembalikan palsu, yang diperlukan.


Samir Jwarchan
Hanya gunakan salah satu daripada syarat berikut jika lain:
Kaedah 1:

<strong>if([yourString isEqualToString:@""]){
        // yourString is empty.
    }
    else {
        // yourString has some text on it.
    } </strong>

Kaedah 2:

if([yourString length] == 0){
    // Empty yourString
}
else {
    // yourString is not empty
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan