有没有办法将NSString初始化为NSMutableString?还是逆序?
-(void)st:(NSString *)st
{
NSMutableString str = st; // gives warning..
NSLog(@"string: %@", str);
}
答案 0 :(得分:10)
NSString
是一个不可变的表示(或者最坏的只读视图)。因此,如果您知道它是可变的或者制作可变副本,则需要转换为NSMutableString
:
-(void)st:(NSString *)st
{
NSMutableString *str = [[st mutableCopy] autorelease];
NSLog(@"string: %@", str);
}
我自动释放了它,因为mutableCopy
返回一个保留计数为1的新初始化副本。
答案 1 :(得分:4)
您可以将NSMutableString设置为NSString,但不能将其设置为
NSString *str = [NSMutableString alloc]init];
没关系,但是
NSMutableString *str = [[NSString alloc]init];
不是。这是因为NSMutableString是NSString的子类,因此它是'NSString。 但是,您可以使用
从NSString创建可变字符串NSMutableString *mStr = [str mutableCopy];
答案 2 :(得分:4)
NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];
重要! mutableCopy
会返回您拥有的对象,因此您必须释放或自动发布它。
答案 3 :(得分:1)
对于Swift用户,以下内容适用于Xcode 7。
var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)