obj-C / Какао передает параметры неизвестного класса (но общего происхождения) в метод.Возможный? - PullRequest
0 голосов
/ 13 мая 2011

У меня есть коллекция классов, определенных из UIView.

@interface {

UIView *thisView
UIView *thatView

}

...

thisView *viewOne = [[thisView alloc] init];
thatView *viewTwo = [[thatView alloc] init];

Теперь, скажем, я хочу создать метод, который будет принимать эти объекты и вызывать функцию, которая является общей для них обоих, а также устанавливать общие параметрыи делать всевозможные неведомые вещи, как передать эти объекты ему, если они принадлежат к разным классам (при условии, что они весьма различны)?

[self exampleMethod:viewOne];
[self exampleMethod:viewTwo];

- (void)exampleMethod:(UIView *)viewNumber //will this suffice?
{
    [viewNumber anotherMethod];

...

Ответы [ 3 ]

1 голос
/ 13 мая 2011

Если вы хотите использовать общие объекты, вы можете проверить, отвечают ли они на сообщение, которое вы хотите выполнить. Затем выполните сообщение.

id blah;

if ([blah respondsToSelector:@selector(someMethod:)])
{
    [blah performSelector:@selector(someMethod:) withObject:anObject];
}

для вашего примера

- (void)exampleMethod:(UIView *)viewNumber //will this suffice?
{
    if ([viewNumber respondsToSelector:@selector(anotherMethod)])
    {
        [viewNumber performSelector:@selector(anotherMethod)];
    }

}
1 голос
/ 13 мая 2011

Две наиболее распространенные практики:

  1. Создайте UIView подкласс (exampleClass), который содержит все "общие вещи" - методы, свойства и т. Д. - и затем определите ваши thisView и thatView классы как подклассы exampleClass. Затем вы можете использовать exampleClass в качестве параметра в вашем exampleMethod.

  2. Создайте протокол , а затем thisView и thatView реализуйте протокол.

Оба эти метода являются фундаментальными для Objective-C (и для объектно-ориентированного программирования), и, вероятно, стоит узнать о них больше, прежде чем тратить много времени на написание кода.

1 голос
/ 13 мая 2011

Если существует общий родительский класс, который отвечает на сообщения, которые вы планируете отправлять, вы можете ввести переменную в качестве таковой. В противном случае вы можете создать протокол, определяющий общий интерфейс.

...