Rumah  >  Soal Jawab  >  teks badan

objective-c - 如何检测字符串在Obj-C里是否为空?

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

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

大家讲道理大家讲道理2711 hari yang lalu460

membalas semua(1)saya akan balas

  • 天蓬老师

    天蓬老师2017-04-21 11:20:49

    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
    }
    

    balas
    0
  • Batalbalas