Domanda

Esiste un modo per inizializzare NSString su NSMutableString? e anche invertire l'ordine?

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

Soluzione

NSString è una rappresentazione immutabile (o una visione di sola lettura nel peggiore dei casi). Quindi dovresti eseguire il cast su un NSMutableString se sai che è modificabile o crearne una copia mutevole:

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

L'ho rilasciato automaticamente perché mutableCopy restituisce una copia appena inizializzata con un conteggio di conservazione di 1.

Altri suggerimenti

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

Importante! mutableCopy restituisce un oggetto che possiedi, quindi devi rilasciarlo o rilasciarlo automaticamente.

Puoi impostare un NSMutableString su un NSString, ma non viceversa

NSString *str =  [NSMutableString alloc]init];

va bene, ma

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

non lo è. Questo perché NSMutableString è una sottoclasse di NSString, quindi "è un" NSString. Puoi comunque creare una stringa mutabile da una NSString con

NSMutableString *mStr = [str mutableCopy];

Swift 2.0

Per gli utenti Swift, quanto segue funziona in Xcode 7.

var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top