2011-10-25 20 views

cevap

84
if([obj isKindOfClass:[NSArray class]]){ 
    //Is array 
}else if([obj isKindOfClass:[NSDictionary class]]){ 
    //is dictionary 
}else{ 
    //is something else 
} 
12

BOOL değerlerini dönmelidir

[myObject isKindOfClass:[NSDictionary class]] 

Bunların her ikisi de

[myObject isKindOfClass:[NSArray class]] 

ve

deneyin. Bu NSObject yöntemin temel kullanımıdır: In Objective-C, how do I test the object type?

8

Bir JSON veya XML veri ayrıştırma ediyoruz durum düşünün: Biraz fazla bilgi için

-(BOOL)isKindOfClass:(Class)aClass 

, burada bu cevaba bakınız tepki. Kullandığınız ayrıştırma kitaplığına bağlı olarak, NSArrays veya NSDictionaries ile bitmeyebilir. Bunun yerine __NSCFArray veya __NSCFDictionary olabilir. Her ihtimale karşı

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 
} 
+2

-1 Birçok nesneler yanıt verebilir Aynı seçicilere, özellikle “lastObject” veya “allKeys” gibi jenerik bir şey. 'IsKindOfClass:' kullanımı, açıkça 'NSArray' ve 'NSDictionary' gibi sınıf kümeleriyle uğraşmanın yoludur. – Calrion

+1

Bu cevap tamamen saçmalık. [myObject isKindOfClass: [NSArray class]], "myObject bir NSArray gibi davranacak mı?" sorusunu doğru bir şekilde yanıtlıyor ve istediğiniz bu. Sadece NSArray veya NSDictionary'ın yanıtlayacağı bir seçici yoktur. İki dakika içinde "allKeys" ve "lastObject" örnek yöntemleriyle bir sınıf oluşturabilirim. Veya "allKeys" i NSArray'a bir kategori yöntemi olarak ekleyin. – gnasher729

0

: Bir dizi varsa veya bir sözlük sadece bir dizi veya sözlük yanıt vereceğini bir seçicinin o yanıt verip kontrol etmek olup olmadığına Bu durumda

, en iyi yolu kontrol etmek Herkes bu partiye Swift eşdeğerini arıyor geç geliyor, işte gidiyorsun. sadece o türlerini kontrol etmez, çünkü çok daha şık Objective-C sürümü, IMHO daha, ama aynı anda istenen türüne onları atmalarını:

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 
} 
İlgili konular