Frage

Gibt es eine Möglichkeit NSString zu NSMutableString zu initialisieren? und auch umgekehrte Reihenfolge?

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

Lösung

NSString ist eine unveränderliche Darstellung (oder eine Nur-Lese-Ansicht im schlimmsten Fall). So müssen Sie entweder gegossen zu einem NSMutableString wenn Sie wissen, es ist wandelbar oder eine änderbare Kopie machen:

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

ich Autoreleased es, weil mutableCopy eine neu initialisiert Kopie mit einer Zählung von 1 beibehalten zurück.

Andere Tipps

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

Wichtig! mutableCopy gibt ein Objekt, die Sie besitzen, so müssen Sie entweder freigeben oder Autorelease.

Sie können eine NSMutableString zu einem NSString gesetzt, aber nicht umgekehrt

NSString *str =  [NSMutableString alloc]init];

ist in Ordnung, aber

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

ist es nicht. Dies liegt daran, eine NSMutableString eine Unterklasse von NSString ist, so ist es ein "NSString. Sie können jedoch eine veränderbare Zeichenfolge aus einem NSString erstellen mit

NSMutableString *mStr = [str mutableCopy];

Swift 2.0

Für Swift Benutzer, die folgenden Werke in Xcode 7.

var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top