Si vous ne visez pas iOS 6 ou OS X 10.8, je tiens à souligner qu'il est toujours remarquablement facile de faire fonctionner la soustraction. Tout ce que vous avez à faire, c'est d'ajouter les méthodes requises en tant que catégorie des classes pour lesquelles vous voulez que l'indice fonctionne, et d'implémenter ces méthodes de manière appropriée. Ainsi, ajoutez aux classes suivantes les méthodes :
NSArray
: - (id)objectAtIndexedSubscript: (NSUInteger)index;
NSMutableArray
: - (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;
NSDictionary
: - (id)objectForKeyedSubscript: (id)key;
NSMutableDictionary
: - (void)setObject: (id)obj forKeyedSubscript: (id)key;
Pour les mettre en œuvre, il suffit d'appeler la méthode appropriée de la classe. Par exemple, pour implémenter l'inscription sur NSArray, il suffit d'implémenter :
- (id) objectAtIndexedSubscript:(NSUInteger)index{
return [self objectAtIndex:index];
}
Le seul inconvénient que je vois est que vous devez vous assurer d'importer votre catégorie dans toute classe qui a l'intention d'utiliser l'indice. Bien sûr, vous pouvez contourner cette exigence en incluant l'élément #import
dans l'en-tête de votre préfixe, généralement le fichier : <appname>-Prefix.pch
. (merci à Josh Caswell de l'avoir signalé).
L'avantage est que vous pouvez modifier les méthodes d'inscription en fonction de vos besoins. Par exemple, Apple ne vous permet pas d'ajouter/supprimer des objets dans NSMutableArray à l'aide d'indices, mais cela peut être fait assez facilement :
- (void) setObject:(id)obj atIndexedSubscript:(NSUInteger)index{
if (index < self.count){
if (obj)
[self replaceObjectAtIndex:index withObject:obj];
else
[self removeObjectAtIndex:index];
} else {
[self addObject:obj];
}
}
0 votes
La page sur clang.llvm.org concernant les littéraux Objective-C indique que vous devez utiliser Apple LLVM 4.0 ou clang v3.1 pour utiliser les nouvelles fonctionnalités. Avez-vous installé l'une de ces versions, et est-elle spécifiée dans vos paramètres de construction ?
0 votes
Oui, j'utilise LLVM 4.0. J'aurais dû mentionner que
3 votes
Vous devez également compiler avec les SDK iOS 6 ou OS X 10.8, faute de quoi les objets Foundation ne disposent pas des méthodes nécessaires pour l'indice de la syntaxe littérale.
1 votes
@JoshCaswell C'est la réponse, je compile pour iOS5. Postez comme une réponse pour que je puisse accepter !
0 votes
stackoverflow.com/questions/9347722/