Как проверить, к какому классу относится объект в Objective-C? - PullRequest
206 голосов
/ 13 января 2010

Как проверить, является ли объект экземпляром определенного класса в Objective-C? Допустим, я хочу посмотреть, является ли объект a экземпляром класса b или класса c, как мне это сделать?

Ответы [ 6 ]

343 голосов
/ 13 января 2010

Чтобы проверить, является ли объект экземпляром класса a:

[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.

или

[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a 
// given class.

Чтобы получить имя класса объекта, вы можете использовать функцию NSStringFromClass:

NSString *className = NSStringFromClass([yourObject class]);

или c-функция из API-интерфейса target-c:

#import <objc/runtime.h>

/* ... */

const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);

РЕДАКТИРОВАТЬ: В Swift

if touch.view is UIPickerView {
    // touch.view is of type UIPickerView
}
21 голосов
/ 07 января 2013

Вы также можете использовать

NSString *className = [[myObject class] description]; 

на любом NSObject

3 голосов
/ 22 февраля 2014

Если вы хотите проверить определенный класс, вы можете использовать

if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}
3 голосов
/ 23 января 2014

Что означает isKindOfClass в документации Apple

Будьте осторожны при использовании этого метода на объектах, представленных кластером классов. Из-за природы кластеров классов возвращаемый объект может не всегда соответствовать ожидаемому типу. Если вы вызываете метод, который возвращает кластер классов, точный тип, возвращаемый методом, является лучшим индикатором того, что вы можете сделать с этим объектом. Например, если метод возвращает указатель на объект NSArray, вы не должны использовать этот метод, чтобы увидеть, является ли массив изменяемым, как показано в следующем коде:

// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
    // Modify the object
}

Если вы используете такие конструкции в своем коде, вы можете подумать, что можно модифицировать объект, который в действительности не должен изменяться. Это может создать проблемы для другого кода, который ожидает, что объект останется неизменным.

1 голос
/ 06 октября 2016

, если вы хотите получить имя класса, просто позвоните: -

id yourObject= [AnotherClass returningObject];

NSString *className=[yourObject className];

NSLog(@"Class name is : %@",className);
0 голосов
/ 06 июля 2017

Вы также можете проверить время выполнения. Поместите одну точку останова в код и внутри консоли (lldb) запишите

(lldb) po [yourObject class]

Как это ..

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...