Est-il possible d'outrepasser l'utilisation d'un opérateur en Objective-C ?
Par exemple
myClassInstance + myClassInstance
appelle une fonction personnalisée pour ajouter les deux.
Est-il possible d'outrepasser l'utilisation d'un opérateur en Objective-C ?
Par exemple
myClassInstance + myClassInstance
appelle une fonction personnalisée pour ajouter les deux.
La surcharge des opérateurs n'est pas une caractéristique de l'Objective-C. Si deux instances de vos classes peuvent être ajoutées l'une à l'autre, fournissez une méthode et autorisez leur ajout à l'aide de cette méthode :
Thing *result = [thingOne thingByAddingThing:thingTwo];
Ou, si votre classe est mutable :
[thingOne addThing:thingTwo];
Jetez un coup d'œil à la Page Swift sur le site des développeurs d'Apple. Ça dit : Swift est le successeur des langages C et Objective-C.
Il se peut que vous souhaitiez prendre en charge l'indice pour votre objet. L'abréviation est no surcharge de l'opérateur, mais cela peut être pratique pour un objet de collection. NSArray et NSDictionary supportent tous deux l'utilisation d'indices. Par exemple :
NSMutableArray *a = [NSMutableArray new]; a[0] = @"Hello";
La façon de prendre en charge l'inscription d'un indice est de mettre en œuvre ce qui suit :
-(id)objectAtIndexedSubscript:(NSUInteger)idx; -(void)setObject:(id)newObject atIndexedSubscript:(NSUInteger)idx];
Je sais que c'est une vieille question mais je voulais juste laisser cette réponse ici pour toute personne qui voudrait savoir si c'est une possibilité.
La réponse est OUI !
Vous devrez utiliser une variante d'Objective-C appelée Objective-C++. A titre d'exemple, supposons que vous ayez créé un nouveau projet d'outil de ligne de commande en Objective-C. Afin d'autoriser les fonctionnalités C++, vous devrez renommer "main.m" en "main.mm". Ensuite, vous pourrez mélanger du code C++ avec votre code Objective-C dans le même fichier. Il y a quelques limitations, mais j'ai testé la surcharge d'opérateurs et cela semble fonctionner parfaitement avec les objets Objective-C pour autant que je puisse dire. J'ai inclus un exemple de code source pour vous donner une idée de la façon de procéder :
//main.mm
#import <Foundation/Foundation.h>
#include <iostream>
#include <string>
std::ostream &operator<<(std::ostream &os, NSString *s) {
os << [s UTF8String];
return os;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str = @"I'm an NSString!";
std::cout << str << std::endl;
}
return 0;
}
Voici mon résultat après avoir construit et exécuté ce code :
I'm an NSString! Program ended with exit code: 0
J'espère que cela sera utile à quelqu'un !
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.