Como inicializar NSString para NSMutableString?
-
08-07-2019 - |
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);
}
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)