NSString を NSMutableString に初期化する方法はありますか? また、逆順ですか?
-(void)st:(NSString *)st
{
NSMutableString str = st; // gives warning..
NSLog(@"string: %@", str);
}
NSString を NSMutableString に初期化する方法はありますか? また、逆順ですか?
-(void)st:(NSString *)st
{
NSMutableString str = st; // gives warning..
NSLog(@"string: %@", str);
}
NSString
不変の表現 (または最悪の場合は読み取り専用ビュー) です。したがってNSMutableString
、変更可能であることがわかっている場合はにキャストするか、変更可能なコピーを作成する必要があります。
-(void)st:(NSString *)st
{
NSMutableString *str = [[st mutableCopy] autorelease];
NSLog(@"string: %@", str);
}
mutableCopy
保持カウントが 1 の新しく初期化されたコピーを返すため、自動解放しました。
NSMutableString を NSString に設定できますが、その逆はできません
NSString *str = [NSMutableString alloc]init];
大丈夫ですが、
NSMutableString *str = [[NSString alloc]init];
ではありません。これは、NSMutableString が NSString のサブクラスであるためであり、NSString であるということです。ただし、NSString から変更可能な文字列を作成することはできます。
NSMutableString *mStr = [str mutableCopy];
NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];
重要! mutableCopy
自分が所有するオブジェクトを返すため、解放または自動解放する必要があります。
Swift ユーザーの場合、Xcode 7 では次のように動作します。
var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)