質問

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で新しく初期化されたコピーを返すため、自動リリースしました。

他のヒント

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

重要! mutableCopy は所有するオブジェクトを返すので、それを解放するか自動解放する必要があります。

NSMutableStringをNSStringに設定できますが、その逆はできません

NSString *str =  [NSMutableString alloc]init];

大丈夫ですが、

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

ではありません。これは、NSMutableStringがNSStringのサブクラスであるため、NSStringであるためです。 ただし、

を使用してNSStringから可変文字列を作成できます。
NSMutableString *mStr = [str mutableCopy];

Swift 2.0

Swiftユーザーの場合、Xcode 7では以下が機能します。

var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top