“将'const NSString *'发送到类型'NSString *'的参数将丢弃限定符"警告 [英] "sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers" warning

查看:81
本文介绍了“将'const NSString *'发送到类型'NSString *'的参数将丢弃限定符"警告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个常量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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆