Как инициализировать NSString в NSMutableString? - PullRequest
6 голосов
/ 30 ноября 2009

Есть ли способ инициализировать NSString в NSMutableString? а также обратный порядок?

-(void)st:(NSString *)st
{
  NSMutableString str = st; // gives warning..
  NSLog(@"string: %@", str);
}

Ответы [ 4 ]

10 голосов
/ 30 ноября 2009

NSString является неизменным представлением (или, в худшем случае, представлением только для чтения). Так что вам нужно будет либо привести к NSMutableString, если вы знаете, что оно изменчиво, либо сделать изменяемую копию:

-(void)st:(NSString *)st
{
  NSMutableString *str =  [[st mutableCopy] autorelease];
  NSLog(@"string: %@", str);
}

Я автоматически выпустил его, потому что mutableCopy возвращает только что инициализированную копию со счетом сохранения 1.

4 голосов
/ 30 ноября 2009
NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];

Внимание! mutableCopy возвращает принадлежащий вам объект, поэтому вы должны либо освободить, либо автоматически освободить его.

4 голосов
/ 30 ноября 2009

Вы можете установить NSMutableString в NSString, но не наоборот

NSString *str =  [NSMutableString alloc]init];

нормально, но

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

нет. Это связано с тем, что NSMutableString является подклассом NSString, поэтому он является NSString. Однако вы можете создать изменяемую строку из NSString с помощью

NSMutableString *mStr = [str mutableCopy];
1 голос
/ 08 сентября 2015

Свифт 2.0

Для пользователей Swift в Xcode 7 работает следующее.

var str : String = "Regular string"
var mutableStr : NSMutableString = NSMutableString(string: str)
...