¿Cómo inicializar NSString a NSMutableString?
-
08-07-2019 - |
Pregunta
¿Hay alguna forma de inicializar NSString a NSMutableString? y también en orden inverso?
-(void)st:(NSString *)st
{
NSMutableString str = st; // gives warning..
NSLog(@"string: %@", str);
}
Solución
NSString
es una representación inmutable (o una vista de solo lectura en el peor de los casos). Por lo tanto, necesitaría emitir a un NSMutableString
si sabe que es mutable o hacer una copia mutable:
-(void)st:(NSString *)st
{
NSMutableString *str = [[st mutableCopy] autorelease];
NSLog(@"string: %@", str);
}
Lo volví a publicar automáticamente porque mutableCopy
devuelve una copia recién inicializada con un recuento de retención de 1.
Otros consejos
NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];
¡Importante! mutableCopy
devuelve un objeto que posee, por lo que debe liberarlo o liberarlo automáticamente.
Puede establecer un NSMutableString en un NSString, pero no al revés
NSString *str = [NSMutableString alloc]init];
está bien, pero
NSMutableString *str = [[NSString alloc]init];
no lo es. Esto se debe a que NSMutableString es una subclase de NSString, por lo que 'es' NSString. Sin embargo, puede crear una cadena mutable desde un NSString con
NSMutableString *mStr = [str mutableCopy];
Swift 2.0
Para los usuarios de Swift, lo siguiente funciona en Xcode 7.
var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)