use*_*951 343 warnings constants objective-c nsstring
我有常量NSString,我想调用如下:
[newString isEqualToString:CONSTANT_STRING];
Run Code Online (Sandbox Code Playgroud)
这里有错误的代码吗?
我收到了这个警告:
将'const NSString*'发送到'NSString*'类型的参数会丢弃限定符
这些如何宣布?
alb*_*amg 901
您应该声明您的常量字符串,如下所示:
NSString * const kSomeConstantString = @""; // constant pointer
Run Code Online (Sandbox Code Playgroud)
代替:
const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";
Run Code Online (Sandbox Code Playgroud)
前者是指向NSString对象的常量指针,而后者是指向常量NSString对象的指针.
使用a NSString * const可防止您重新分配kSomeConstantString以指向其他NSString对象.
该方法isEqualToString:需要一个类型的参数NSString *.如果将指针传递给常量字符串(const NSString *),则传递的内容与预期的不同.
此外,NSString对象已经是不可变的,因此使它们const NSString毫无意义.
只是把所有在一个地方放在stackoverflow上的各个帖子上并且对我有用,#define很糟糕,因为你不能从变量类型中受益,基本上编译器会在编译时替换所有出现的内容(在需要时导入Constants.h):
// Constants.h
#import <Foundation/Foundation.h>
@interface Constants : NSObject
extern NSString *APP_STATE_LOGGED_IN;
extern NSString *APP_STATE_LOGGED_OUT;
@end
// Constants.m
#import <Foundation/Foundation.h>
#import "Constants.h"
@implementation Constants
NSString *APP_STATE_LOGGED_IN = @"APP_STATE_LOGGED_IN";
NSString *APP_STATE_LOGGED_OUT = @"APP_STATE_LOGGED_OUT";
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54633 次 |
| 最近记录: |