Можно ли переопределить использование оператора в Objective-C?
Например
myClassInstance + myClassInstance
вызывает пользовательскую функцию для добавления двух.
Можно ли переопределить использование оператора в Objective-C?
Например
myClassInstance + myClassInstance
вызывает пользовательскую функцию для добавления двух.
Перегрузка оператора не является функцией Objective-C. Если два экземпляра ваших классов могут быть добавлены вместе, укажите метод и добавьте их с помощью этого метода:
Thing *result = [thingOne thingByAddingThing:thingTwo];
Или, если ваш класс изменен:
[thingOne addThing:thingTwo];
Нет, вы не можете сделать это в Objective-C.
Вы можете сделать это сейчас в Swift, преемнике objC. И поскольку Objective-C и Swift созданы для совместной работы Это может быть интересно для вас.
Возможно, вы захотите поддержать подписку на свой объект. Подписки - это не перегрузка операторов, но это может быть удобно для объекта коллекции. NSArray и NSDictionary поддерживают подписи. Например:
NSMutableArray *a = [NSMutableArray new];
a[0] = @"Hello";
Способ поддержки индексирования индексирования заключается в следующем:
-(id)objectAtIndexedSubscript:(NSUInteger)idx;
-(void)setObject:(id)newObject atIndexedSubscript:(NSUInteger)idx];
Нет, Objective-C не поддерживает перегрузку оператора.
Во-первых, перегрузка оператора зла. Во-вторых, C не имеет перегрузки оператора, а Objective-C является надлежащим надмножеством C, который добавляет только несколько ключевых слов и синтаксис сообщений.
Если вы используете среду разработки Apple, вы можете использовать Objective-C ++ вместо Objective-C, что дает вам доступ ко всем ошибкам и ошибкам С++, включая перегрузку операторов. Самый простой способ использовать Objective-C ++ - это просто изменить расширение в файлах реализации с ".m" на ".mm"