Come inizializzare NSString su NSMutableString?
-
08-07-2019 - |
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);
}
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)