Cha*_*sha 25 string objective-c parameter-passing ios
首先,抱歉这个简单的问题.但我需要了解发生了什么.
我认为输出应该是upper case string.但它出来了UPPER CASE STRING.
- (void)test
{
NSString *stringVar = @"UPPER CASE STRING";
[self changeString:stringVar];
NSLog(@"value after changed : %@", stringVar);
}
- (void)changeString:(NSString*)string
{
string = [string lowercaseString];
}
Run Code Online (Sandbox Code Playgroud)
发生了什么以及如何解决它?
Gre*_*ill 59
该[string lowercaseString]调用将创建一个分配给局部变量的新 NSString对象string.这不会改变函数stringVar外部的changeString值.指针本身按值传递.
做你想要的一种方法是将指针传递给指针:
-(void) test
{
NSString *stringVar = @"UPPER CASE STRING";
[self changeString:&stringVar];
NSLog(@"value after changed : %@", stringVar);
}
-(void) changeString:(NSString**)string
{
*string = [*string lowercaseString];
}
Run Code Online (Sandbox Code Playgroud)
如果查看[NSString lowerCaseString] 方法的引用,可以看到它返回一个带有小写字符的新字符串:
返回接收器的小写表示.
Run Code Online (Sandbox Code Playgroud)- (NSString *)lowercaseString
你的代码所做的只是用lowercaseString调用的输出覆盖输入字符串的引用,这没有任何效果.解决此问题的最佳方法是让您自己返回值,这使方法更容易理解:
-(void) test
{
NSString *stringVar = @"UPPER CASE STRING";
stringVar = [self changeString:stringVar];
NSLog(@"value after changed : %@", stringVar);
}
-(NSString *) changeString:(NSString*)string
{
string = [string lowercaseString];
return string;
}
Run Code Online (Sandbox Code Playgroud)
您需要了解这NSString是不可变的,因此除了重新分配引用之外,没有办法更改字符串的内容.但是NSMutableString,您可以使用,可以在适当的位置进行修改.
| 归档时间: |
|
| 查看次数: |
31855 次 |
| 最近记录: |