как проверить, создан ли класс пользователем, это класс, предоставляемый в API pobjective-c - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть пользовательский класс типа CircularDynamicUIView. он находится в массиве и включает в себя несколько представлений, таких как «просмотр кнопок», «просмотр изображений», «прокрутка» и другие. как программно в цикле обнаружить этот определенный пользователем класс. например: с помощью оператора if

как проверить, является ли этот класс классом, созданным или разработанным пользователем, а не классом, уже созданным target-c.

1 Ответ

0 голосов
/ 11 ноября 2019

Как отметил @rmaddy в комментариях, вы не можете явно различить, например, ваш пользовательский подкласс CircularDynamicUIView и значение по умолчанию UIView ... но вы можете оценивать в определенном порядке.

Пример (используя ваш предыдущий вопрос):

for (id uiComponent in uiviews) {

    if ([uiComponent isKindOfClass:[CircularDynamicUIView class]]) {
        NSLog(@"Yes, it is a CircularDynamicUIView");
    } else {
        NSLog(@"No, it is NOT a CircularDynamicUIView");
    }

    // if CircularDynamicUIView is a subclass descendant of UIView
    // this will also be true
    if ([uiComponent isKindOfClass:[UIView class]]) {
        NSLog(@"Yes, it is a UIView");
    } else {
        NSLog(@"No, it is NOT a UIView");
    }

}

Поскольку оба условия if будут выполняться, вы не захотите оценивать второе if, если первый тест был истинным.

Опять же, основываясь на вашем предыдущем вопросе, вы можете использовать этот подход:

for (id uiComponent in uiviews) {
    CircularDynamicUIView *cdView;
    UIView *uiView;
    UIImageView *uiImageView;

    if ([uiComponent isKindOfClass:[CircularDynamicUIView class]]) {
        cdView = (CircularDynamicUIView *)uiComponent;
    } else if ([uiComponent isKindOfClass:[UIImageView class]]) {
        uiImageView = (UIImageView *)uiComponent;
    } else if ([uiComponent isKindOfClass:[UIView class]]) {
        uiView = (UIView *)uiComponent;
    }


    if (cdView) {
        // do what you want because it's a CircularDynamicUIView
        if ([cdView isHidden]) {
            // ...
        }
        // etc ...
    }
    if (uiImageView) {
        // do what you want because it's a UIImageView
        if ([uiImageView isHidden]) {
            // ...
        }
        // etc ...
    }
    if (uiView) {
        // do what you want because it's a UIView
        if ([uiView isHidden]) {
            // ...
        }
        // etc ...
    }
}
...