Comment initialiser NSString à NSMutableString?
-
08-07-2019 - |
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);
}
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)