Могу ли я перегрузить оператор в Objective-C? - PullRequest
54 голосов
/ 01 сентября 2010

Возможно ли переопределить использование оператора в Objective-C?

Например,

myClassInstance + myClassInstance

вызывает пользовательскую функцию для добавления двух.

Ответы [ 6 ]

90 голосов
/ 01 сентября 2010

Перегрузка оператора не является функцией Objective-C.Если два экземпляра ваших классов могут быть добавлены вместе, предоставьте метод и разрешите их добавление с использованием этого метода:

Thing *result = [thingOne thingByAddingThing:thingTwo];

Или, если ваш класс изменчив:

[thingOne addThing:thingTwo];
16 голосов
/ 01 сентября 2010

Нет, вы не можете сделать это в Objective-C.

7 голосов
/ 03 июня 2014

Вы можете сделать это сейчас в Swift , преемнике objC.А поскольку Objective-C и Swift созданы для совместной работы , этот может быть вам интересен.

3 голосов
/ 25 декабря 2014

Возможно, вы захотите поддержать подписку на ваш объект. Подписка - это , а не перегрузка оператора, но это может быть удобно для объекта коллекции. NSArray и NSDictionary поддерживают подписку. Например:

NSMutableArray *a = [NSMutableArray new]; a[0] = @"Hello";

Способ поддержки подписки на индексы заключается в следующем:

-(id)objectAtIndexedSubscript:(NSUInteger)idx; -(void)setObject:(id)newObject atIndexedSubscript:(NSUInteger)idx];

0 голосов
/ 24 сентября 2016

Нет, Objective-C не поддерживает перегрузку операторов.

0 голосов
/ 01 сентября 2010

Во-первых, перегрузка оператора - зло . Во-вторых, в C нет перегрузки операторов, а Objective-C - это правильный расширенный набор C, который добавляет лишь несколько ключевых слов и синтаксис обмена сообщениями.

При этом, если вы используете среду разработки Apple, вы можете использовать Objective-C ++ вместо Objective-C, что дает вам доступ ко всем ошибкам и ошибкам C ++, включая перегрузку операторов. Самый простой способ использовать Objective-C ++ - просто изменить расширение ваших файлов реализации с ".m" на ".mm"

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