簡體   English   中英

處理不同類型的對象

[英]Handle object of different types

從我的后端API,我得到一個對象的json,該對象由數組,字典,數字,布爾值,字符串等組成。例如。

{
data:[
{
id : 1,
name : "abcd"
},
{
id : 2,
name : "abcde"
},
{
id : 3,
name : "abcde"
},
]
total_count : 10
}

有時total_count中的值是數字,有時是字符串。 在我的代碼中,我已經編碼

[lbl setText:[jsonObject valueForKey:@"total_count"]]

由於total_count鍵值為數字時,這會導致崩潰。 顯然我可以做到這一點

[lbl setText:[NSString stringWithFormat:@"%d",[[jsonObject valueForKey:@"total_count"] intValue]]];

但這在API中的很多地方都會發生。 字符串代替了布爾。 data:false而不是data:[]

[編輯]

[[AFHTTPRequestOperationManager manager] GET:[URLString attachToken] parameters:parameters success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
        if([[[responseObject valueForKey:@"response"] valueForKey:@"status"] boolValue]) {
NSLog(@"success");
}
                if(success)success(operation, **responseObject**);

            } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
                if(failure)failure(operation, error);
                if(operation.response.statusCode == 0) {
                    ATAFNetworkingRequestObject *obj = [[ATAFNetworkingRequestObject alloc] init];
                    obj.urlString = URLString;
                    obj.paramters = parameters;
                    obj.successBlock = success;
                    obj.failureBlock = failure;
                    obj.type = ATNetworkingRequestGET;
                    if(![self duplicateRequestExists:obj])[pendingAPICalls addObject:obj];
                }

                [self logAPIFailedWithOperation:operation parameters:parameters error:error];
            } autoRetry:5 retryInterval:7];

在根據您A string is coming instead of a bool. data:false instead of data:[]之后,您會喜歡A string is coming instead of a bool. data:false instead of data:[] A string is coming instead of a bool. data:false instead of data:[]

if([datajsonObject isKindOfClass:[NSArray class]]){
    //Is array
}else if([datajsonObject isKindOfClass:[NSDictionary class]]){
    //is dictionary
}else if([datajsonObject isKindOfClass:[NSString class]])
 {
    //is String
 }
else{
    //is something else
}

您可以檢查服務器值是數字還是字符串

NSString *newString = [NSString stringWithFormat:@"%@",[[jsonObject valueForKey:@"total_count"]

if ([newString isKindOfClass:[NSNumber class]])
{
    NSLog(@"It is number");
}
if ([newString isKindOfClass:[NSString class]])
{
    NSLog(@"It is string");
}

SWIFT代碼 :

lblCount.text = String(datajsonObject["total_count"] as AnyObject)

目標c:

NSString *strCount = [NSString stringWithFormat:@"%@",[jsonObject valueForKey:@"total_count"]]

if ([strCount isKindOfClass:[NSString class]])
{
    // Write your code to show on label
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM