Как инициализировать NSString в NSMutableString?
-
08-07-2019 - |
Вопрос
Есть ли способ инициализировать 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)