en Objective-c J'ai cette fonction prototype: - (NSString *) formatSQL: (NSString *) sql, ... Je peux passer à cette fonction tout type de paramètres : NSString, NSNumber, entier, float Comment puis-je déterminer dans la fonction si un paramètre est un objet (NSString ..) ou une primitive (integer ...)? grâce BrochPirateobjective-c déterminer si le paramètre est un objet
2
A
Répondre
5
Si vous allez avoir un paramètre qui accepte plusieurs types, vous ne pouvez le faire en toute sécurité en utilisant des objets Obj-C, ce qui signifie en utilisant id
comme type. Vous ne pouvez pas en toute sécurité de se mélanger avec id
float
, integer
etc.
Si vous enveloppé tous les float
s et int
s dans NSNumber
s, vous pourriez avoir une méthode comme ceci:
- (NSString *)formatSQL:(id)obj
{
if ([obj isKindOfClass:[NSString class]]) {
// Format as a string
}
else if ([obj isKindOfClass:[NSNumber class]]) {
// Further processing will be required to differentiate between ints and floats
}
}
Il y a quelques mises en garde à l'utilisation isKindOfClass:
, mais cela devrait servir de bon point de départ.