2017-06-20 7 views
0

Je développe actuellement une classe Objective C ClassA et je suis en train de mettre en œuvre une méthode similaire à NSURL méthode - (BOOL)getResourceValue:(out id __nullable * __nonnull)value forKey:(NSString *)key error:(out NSError ** __nullable)error qui utilise out id *:Objectif C - Mettre en œuvre un procédé utilisant un identifiant sur *

Ma méthode est la suivante: - (BOOL)changeString:(out id *)theString toString:(NSString *)newString

Et je veux ma méthode pour définir theString à (NSString *) newString's valeur

I ma méthode à utiliser comme ceci:

id inputString; 
[[ClassA alloc] changeString:&inputString toString:@"New String"]; 

inputString devrait maintenant être réglé sur "Nouvelle chaîne" (comme id *)

Comment puis-je faire cela en - (BOOL)changeString:(out id *)theString toString:(NSString *)newString?

Merci

+0

Pourquoi utilisez-vous 'id' non spécifié bien que le paramètre passé soit clairement' NSString'? – vadian

+0

Je ne crois pas que vous pouvez sortir un NSString * pouvez-vous? Je pensais que c'était seulement id? – Lucasware

+0

Bien sûr vous pouvez (voir tous les paramètres 'NSError') mais vous avez besoin de deux astérisques' (hors NSString **) theString'. – vadian

Répondre

0

C'est assez facile:

- (BOOL)changeString:(NSString * _Nonnull *)theString 
      toString:(NSString *)newString { 
    *theString = newString; 
    return YES; 
} 

et de l'utiliser:

NSString *inputString; 
BOOL result = [self changeString:&inputString toString:@"Hello World"]; 
NSLog(@"%d - %@", result, inputString); 

inputString ne sont pas tenus d'être nil, vous pouvez même passer une valeur

- (BOOL)changeString:(NSString * _Nonnull *)theString 
      toString:(NSString *)newString { 

    *theString = [NSString stringWithFormat: @"%@ %@", *theString, newString]; 
    return YES; 
} 

NSString *inputString = @"Hello"; 
BOOL result = [self changeString:&inputString toString:@"World"]; 
NSLog(@"%d - %@", result, inputString); 
+0

Je me demandais simplement si une variable 'out' pouvait lire des données si la variable entrée avait une valeur ou si elle était simplement définie sur null? – Lucasware

+0

Vous pouvez également transmettre une valeur. 'inputString' est juste un pointeur. J'ai mis à jour la réponse. – vadian

+0

Merci beaucoup – Lucasware