Вопрос

Есть ли способ инициализировать 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. Однако вы можете создать изменяемую строку из строки NSSt с помощью

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