Question

Existe-t-il un moyen d'initialiser NSString sur NSMutableString? et aussi l'ordre inverse?

-(void)st:(NSString *)st
{
  NSMutableString str = st; // gives warning..
  NSLog(@"string: %@", str);
}
Était-ce utile?

La solution

NSString est une représentation immuable (ou une vue en lecture seule au pire). Il vous faut donc soit transtyper vers un NSMutableString si vous savez qu'il est mutable, soit créer une copie mutable:

-(void)st:(NSString *)st
{
  NSMutableString *str =  [[st mutableCopy] autorelease];
  NSLog(@"string: %@", str);
}

Je l'ai relâché automatiquement car mutableCopy renvoie une copie nouvellement initialisée avec un nombre de conservations égal à 1.

Autres conseils

NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];

Important! mutableCopy renvoie un objet que vous possédez. Vous devez donc le libérer ou l'autoriser.

Vous pouvez définir un NSMutableString sur un NSString, mais pas l'inverse

NSString *str =  [NSMutableString alloc]init];

va bien, mais

NSMutableString *str = [[NSString alloc]init];

n'est pas. En effet, un NSMutableString est une sous-classe de NSString, il s'agit donc d'un "NSString". Vous pouvez cependant créer une chaîne mutable à partir d'un NSString avec

NSMutableString *mStr = [str mutableCopy];

Swift 2.0

Pour les utilisateurs de Swift, les opérations suivantes fonctionnent dans Xcode 7.

var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top