gpt4 book ai didi

objective-c - 如何在采用 NSString 的方法中使用 NSMutableString?

转载 作者:行者123 更新时间:2023-12-03 16:54:43 24 4
gpt4 key购买 nike

NSScanner 获取一个指向 NSString 的指针:

NSMutableString *myString;
...
[scanner scanUpToCharactersFromSet:charSet intoString:&myString];
[myString appendString:@"hello"];

但是 myString 是可变的,所以当我稍后尝试执行附加操作时,我收到错误,说我正在尝试改变一个不可变的。我是否必须创建临时副本并来回,或者是否有更有效的方法来执行此操作?

最佳答案

要么做

NSString *myString; //this is just a variable identifier, no object was created and assigned to it yet
...
//scanner will create a NSString and write it to myString. It won't know it is passed to a variable typed NSMutableString or NSString
[scanner scanUpToCharactersFromSet:charSet intoString:&myString];

//instead of creating mutable string you can create a new immutable by appending a string
myString = [myString stringByAppendingString:@"hello"];

更好:请参阅下一个代码片段

NSMutableString *myString; //this is just a variable identifier, no object was created and assigned to it yet
...

//scanner will create a NSString and write it to myString. It won't know it is passed to a variable typed NSMutableString
[scanner scanUpToCharactersFromSet:charSet intoString:&myString];
//myString contains a NSString now, not NSMutableString

myString = [myString mutableCopy]; // make a mutable copy and assign it to the variable
[myString appendString:@"hello"];
<小时/>

在第二种方法中,您会遇到不一致的情况,即 NSMutable 类型变量会在短时间内保存不可变的字符串。这绝对是一个缺陷。解决方案一更加干净。如果您喜欢两个,您应该引入第二个 NSString 变量并将其传递给扫描器,然后将其可变复制到您的 NSMutableString。

NSString *tempString;
NSMutableString *myString;
...

[scanner scanUpToCharactersFromSet:charSet intoString:&tempString];

myString = [tempString mutableCopy];
[myString appendString:@"hello"];

关于objective-c - 如何在采用 NSString 的方法中使用 NSMutableString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com