“将'const NSString *'发送到类型'NSString *'的参数将丢弃限定符"警告 [英] "sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers" warning
问题描述
我有一个常量NSString,我想这样调用:
I have Constants NSString, that I want to call like:
[newString isEqualToString:CONSTANT_STRING];
这里的代码有误吗?
我收到此警告:
将'const NSString *'发送到类型'NSString *'的参数会丢弃限定符
sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers
这些应该如何声明?
推荐答案
您应按以下方式声明常量字符串:
You should declare your constant string as follows:
NSString * const kSomeConstantString = @""; // constant pointer
代替:
const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";
前者是指向NSString
对象的常量指针,而后者是指向恒定NSString
对象的指针.
The former is a constant pointer to an NSString
object, while the latter is a pointer to a constant NSString
object.
使用NSString * const
可以防止您重新分配kSomeConstantString指向另一个NSString
对象.
Using a NSString * const
prevents you from reassigning kSomeConstantString to point to a different NSString
object.
方法isEqualToString:
需要一个类型为NSString *
的参数.如果将指针传递给常量字符串(const NSString *
),则传递的内容与预期的有所不同.
The method isEqualToString:
expects an argument of type NSString *
. If you pass a pointer to a constant string (const NSString *
), you are passing something different than it expects.
此外,NSString
对象已经是不可变的,因此将它们设置为const NSString
是没有意义的.
Besides, NSString
objects are already immutable, so making them const NSString
is meaningless.
这篇关于“将'const NSString *'发送到类型'NSString *'的参数将丢弃限定符"警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!