Check whether an object is an NSArray or NSDictionary

前端 未结 4 616
慢半拍i
慢半拍i 2021-02-01 13:28

As per subject, how can I check whether an object is an NSArray or NSDictionary?

相关标签:
4条回答
  • 2021-02-01 13:44

    Consider the case when you're parsing data from a JSON or XML response. Depending on the parsing library you are using, you may not end up with NSArrays or NSDictionaries. Instead you may have __NSCFArray or __NSCFDictionary.

    In that case, the best way to check whether you have an array or a dictionary is to check whether it responds to a selector that only an array or dictionary would respond to:

    if([unknownObject respondsToSelector:@selector(lastObject)]){
    
    // You can treat unknownObject as an NSArray
    }else if([unknownObject respondsToSelector:@selector(allKeys)]){
    
    // You can treat unknown Object as an NSDictionary
    }
    
    0 讨论(0)
  • 2021-02-01 13:53
    if([obj isKindOfClass:[NSArray class]]){
        //Is array
    }else if([obj isKindOfClass:[NSDictionary class]]){
        //is dictionary
    }else{
        //is something else
    }
    
    0 讨论(0)
  • 2021-02-01 13:59

    Just in case anyone comes late to this party looking for a Swift equivalent, here you go. It's a lot more elegant than the Objective-C version, IMHO, because not only does it check the types, but it casts them to the desired type at the same time:

    if let arrayVersion = obj as? NSArray {
        // arrayVersion is guaranteed to be a non-`nil` NSArray
    } else if let dictionaryVersion = obj as? NSDictionary {
        // dictionaryVersion is guaranteed to be a non-`nil` NSDictionary
    } else {
        // it's neither
    }
    
    0 讨论(0)
  • 2021-02-01 14:04

    Try

    [myObject isKindOfClass:[NSArray class]]
    

    and

    [myObject isKindOfClass:[NSDictionary class]]
    

    Both of these should return BOOL values. This is basic use of the NSObject method:

    -(BOOL)isKindOfClass:(Class)aClass
    

    For a bit more information, see this answer here: In Objective-C, how do I test the object type?

    0 讨论(0)
提交回复
热议问题