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);
}
¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top