在開發(fā)中我們會經(jīng)常遇到得數(shù)據(jù)為空的判斷。
比如我們在獲取地址省市區(qū)信息的時(shí)候,有時(shí)會因?yàn)槟承┦袥]有區(qū)的情況導(dǎo)致返回空<null>,如果這樣進(jìn)行網(wǎng)絡(luò)請求會出現(xiàn)app奔潰的情況,所以這時(shí)候我們就要進(jìn)行數(shù)據(jù)判斷之后在去發(fā)送請求。
一、首先我們先對iOS開發(fā)中遇到的空值進(jìn)行介紹:
nil :指向一個(gè)對象的空指針,nil是一個(gè)空對象,已經(jīng)完全從內(nèi)存中消失了
Nil :指向一個(gè)類的空指針(完全等同于nil 但是常用于類置空)
NULL :指向其他類型的空指針(比如:基本類型和c類型).
NSNull :通常表示集合中的類型(其實(shí)它也是一個(gè)對象,擁有有效的內(nèi)存地址)[NSNull null]
二、對JSON返回的<null>進(jìn)行判斷
if([result isEqual:[NSNull null]]) {
//result是從服務(wù)器返回的數(shù)據(jù)
//在這里進(jìn)行操作
}
三、對(null)的判斷
if(result == nil) {
//在這里進(jìn)行操作
}
四、基本數(shù)據(jù)類型的空值判斷
- 對于類似于NSString類型的數(shù)據(jù)進(jìn)行空值判斷
1、string == nil;
2、[string isEqualToString:@""];
- 對于類似于NSNumber類型的數(shù)據(jù)進(jìn)行空值判斷
1、number == nil;
2、[number isEqualToNumber:@0];
- 對于類似于NSArray類型的數(shù)據(jù)進(jìn)行空值判斷
1、array == nil;
2、array.count = 0;
- 對于類似于NSDictionary類型的數(shù)據(jù)進(jìn)行空值判斷
1、[dictionary isEqual:[NSNull null]];
2、dictionary.count = 0;
- 對于對象類型的數(shù)據(jù)進(jìn)行空值判斷
if(!class) return;
抽取方法:
- (NSString *) changeForNull:(NSString *)change{
NSString *temp = [NSString stringWithFormat:@"%@", change];
if ([temp isEqualToString:@"<null>"] || [temp isEqualToString:@"(null)"] || [temp isEqualToString:@""]) {
temp = @"";
}
return temp;
}
宏定義:
/// 是否為空對象
#define kObjectIsNil(__object) ((nil == __object) || [__object isKindOfClass:NSNull.class])
#define kObjectIsNotNil(__object) (!kObjectIsNil(__object))
/// 字符串為空
#define kStringIsEmpty(__string) (kObjectIsNil(__string) || (__string.length == 0))
/// 字符串不為空
#define kStringIsNotEmpty(__string) (!kStringIsEmpty(__string))