【发布时间】:2010-01-19 08:33:07
【问题描述】:
这行得通:
NSString *myVar = @"whatever";
NSDecimalNumber *myNum = [NSDecimalNumber decimalNumberWithString:@"10"];
myVar = [myNum stringValue];
这个带有可变字符串的版本会产生警告“assignment from distinct Objective-C type”:
NSMutableString *myVar = [NSMutableString stringWithString:@"whatever"]; //UPDATE: CORRECTED CODE
NSDecimalNumber *myNum = [NSDecimalNumber decimalNumberWithString:@"10"];
myVar = [myNum stringValue];
在这两种情况下,stringValue 都返回一个 NSCFString。不可变的 NSString 变量不关心,可变的 NSMutableString 抱怨。
附:有人请为 NSMutableString 和 stringValue 添加标签。
【问题讨论】:
-
你能发布给定的警告吗?
-
(啊,我可以发布 cmets,因为我还在 cookied 中......)。 Laurent,这只是一个黄色 Xcode 警告:“警告:来自不同 Objective-C 类型的赋值”。
-
菲利普和弗拉基米尔的回答已经解释了这种情况。问题是 stringValue 对象是不可变的,因此不能分配给可变字符串变量。 (Vladimir 还指出我的 NSMutableString *myVar = @"whatever"; 代码本质上是非法的,但不会产生相关警告。)谢谢!
-
我实际上只是从 NSMutableString *myVar = @"whatever"; 中更正了我的原始代码。到弗拉基米尔的正确语法 NSMutableString *myVar = [NSMutableString stringWithString:@"whatever"];以避免混淆导致错误的原因。
标签: objective-c cocoa nsstring nsmutablestring