iOS: принять несколько типов объектов в качестве объекта (id) параметра? - PullRequest
1 голос
/ 13 сентября 2011

Я хочу создать метод, который будет принимать UIButton, UIImageView или любой другой объект в качестве параметра. Я пробовал следующее, используя тип идентификатора,

-(void)shiftObject:(id)object {
      object.frame = CGRectMake(0, 0, 20, 20);
}

, но программа проверки статических ошибок xcode пометила его сразу же. Есть ли способ, которым это можно сделать? Я думаю, что я на правильном пути, используя тип идентификатора, но я не уверен, куда идти дальше.

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011

Вы не можете использовать это с «любым другим объектом», просто «с любым другим объектом, обладающим свойством фрейма».

Итак, попробуйте привести к чему-либо с рамкой, например, UIView.Все упомянутые вами объекты наследуются от UIView и поэтому имеют свойство frame.

-(void)shiftObject:(id)object {
      ((UIView*)object).frame = CGRectMake(0, 0, 20, 20);
}
2 голосов
/ 13 сентября 2011

Вы можете привести ваш объект к правильному типу:

((UIButton*)object).frame = ...

или вы можете вызвать сеттер без точечной нотации

[object setFrame:...];

Вы должны проверить, принадлежит ли ваш объектправильный тип или если он отвечает на селектор, который вы хотите отправить.

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