Pergunta

Existe alguma maneira para inicializar NSString para NSMutableString? e também ordem inversa?

-(void)st:(NSString *)st
{
  NSMutableString str = st; // gives warning..
  NSLog(@"string: %@", str);
}
Foi útil?

Solução

NSString é uma representação imutável (ou uma vista somente de leitura na pior das hipóteses). Então você precisa se quer fundido a um NSMutableString se você sabe que é mutável ou fazer uma cópia mutável:

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

Eu autoreleased porque mutableCopy retorna uma cópia recém-inicializado com um manter a contagem de 1.

Outras dicas

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

! Importante mutableCopy retorna um objeto que você possui, então você deve liberar ou autorelease-lo.

Você pode definir um NSMutableString a um NSString, mas não o contrário

NSString *str =  [NSMutableString alloc]init];

é bom, mas

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

não é. Isso ocorre porque um NSMutableString é uma subclasse de NSString, por isso é um 'NSString. No entanto, pode criar uma string mutável de um NSString com

NSMutableString *mStr = [str mutableCopy];

Swift 2.0

Para usuários Swift, as seguintes obras em Xcode 7.

var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top