Bir nesnenin Objective-C'de belirli bir sınıfın örneği olup olmadığını nasıl sınayabilirim? Diyelim ki a nesnesinin b sınıfı mı yoksa c sınıfı örneği mi olduğunu görmek istiyorum, bunu nasıl yapabilirim?
Bir nesnenin Objective-C'de belirli bir sınıfın örneği olup olmadığını nasıl sınayabilirim? Diyelim ki a nesnesinin b sınıfı mı yoksa c sınıfı örneği mi olduğunu görmek istiyorum, bunu nasıl yapabilirim?
Yanıtlar:
Nesnenin a sınıfı bir örnek olup olmadığını test etmek için:
[yourObject isKindOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of
// given class or an instance of any class that inherits from that class.
veya
[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a
// given class.
Nesnenin sınıf adını almak için NSStringFromClass
işlevi kullanabilirsiniz :
NSString *className = NSStringFromClass([yourObject class]);
veya objektif-c çalışma zamanı api'sinden c-fonksiyonu:
#import <objc/runtime.h>
/* ... */
const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);
EDIT: Hızlı
if touch.view is UIPickerView {
// touch.view is of type UIPickerView
}
class_getName
Üzerinden kullanmanın avantajı nedir NSStringFromClass
? Eğer yoksa, bu cevap ayarlanmalıdır.
Ayrıca kullanabilirsiniz
NSString *className = [[myObject class] description];
herhangi bir NSObject'te
Apple Documentation içindeki isKindOfClass hakkında ne demek
Sınıf yöntemiyle temsil edilen nesnelerde bu yöntemi kullanırken dikkatli olun. Sınıf kümelerinin doğası gereği, geri aldığınız nesne her zaman beklediğiniz tür olmayabilir. Sınıf kümesi döndüren bir yöntemi çağırırsanız, yöntem tarafından döndürülen tam tür, bu nesne ile yapabileceklerinizin en iyi göstergesidir. Örneğin, bir yöntem bir NSArray nesnesine bir işaretçi döndürürse, dizinin değiştirilebilir olup olmadığını aşağıdaki kodda gösterildiği gibi görmek için bu yöntemi kullanmamalısınız:
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
Kodunuzda bu tür yapıları kullanırsanız, gerçekte değiştirilmemesi gereken bir nesneyi değiştirmenin uygun olduğunu düşünebilirsiniz. Bunu yapmak, nesnenin değişmeden kalmasını bekleyen diğer kodlar için sorun yaratabilir.
-isKindOfClass:
& -isMemberOfClass:
sınıf küme içindeki nesneleri tanımlamak için kullanılmamalıdır.
Belirli bir sınıfı kontrol etmek istiyorsanız şunu kullanabilirsiniz:
if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}
sınıfın adını almak istiyorsanız sadece arayın: -
id yourObject= [AnotherClass returningObject];
NSString *className=[yourObject className];
NSLog(@"Class name is : %@",className);