有没有办法将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