“sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers” warning

后端 未结 3 824
遥遥无期
遥遥无期 2021-01-29 16:51

I have Constants NSString, that I want to call like:

[newString isEqualToString:CONSTANT_STRING];

Any wrong code here?

I got this warni

相关标签:
3条回答
  • 2021-01-29 17:44

    You should declare your constant string as follows:

    NSString * const kSomeConstantString = @""; // constant pointer
    

    instead of:

    const NSString * kSomeConstantString = @""; // pointer to constant
    // equivalent to
    NSString const * kSomeConstantString = @"";
    

    The former is a constant pointer to an NSString object, while the latter is a pointer to a constant NSString object.

    Using a NSString * const prevents you from reassigning kSomeConstantString to point to a different NSString object.

    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.

    Besides, NSString objects are already immutable, so making them const NSString is meaningless.

    0 讨论(0)
  • 2021-01-29 17:47

    just to put all on one place which found on various post on stackoverflow and works for me , #define is bad because you cannot benefit from variable types, basically the compiler replaces all occurrence when compiles (import Constants.h whenever you need) :

    //  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
    
    0 讨论(0)
  • 2021-01-29 17:53

    spare few minutes to read this. A goodread on pointers hell on constants and vice-versa.

    http://c-faq.com/decl/spiral.anderson.html

    0 讨论(0)
提交回复
热议问题