我有常量 NSString,我想这样调用它:
[newString isEqualToString:CONSTANT_STRING];
这里有错误的代码吗?
我收到了这个警告:
sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers
这些应该如何声明?
最佳答案
你应该如下声明你的常量字符串:
NSString * const kSomeConstantString = @""; // constant pointer
代替:
const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";
前者是一个指向NSString
对象的常量指针,而后者是一个指向常量NSString
对象的指针。
使用 NSString * const
可以防止您重新分配 kSomeConstantString 以指向不同的 NSString
对象。
isEqualToString:
方法需要 NSString *
类型的参数。如果你传递一个指向常量字符串的指针 (const NSString *
),你传递的东西与它预期的不同。
此外,NSString
对象已经是不可变的,所以将它们设为 const NSString
是没有意义的。
关于objective-c - "sending ' 常量 NSString * ' to parameter of type ' NSString * ' discards qualifiers"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6828831/