ฉันมีค่าคงที่ NSString ที่ฉันต้องการโทรหา:
[newString isEqualToString:CONSTANT_STRING];
มีรหัสผิดที่นี่หรือไม่
ฉันได้รับคำเตือนนี้:
ส่ง 'const NSString *' ไปยังพารามิเตอร์ประเภท 'NSString *' เพื่อยกเลิกตัวระบุ
จะประกาศสิ่งเหล่านี้ได้อย่างไร?
ฉันมีค่าคงที่ NSString ที่ฉันต้องการโทรหา:
[newString isEqualToString:CONSTANT_STRING];
มีรหัสผิดที่นี่หรือไม่
ฉันได้รับคำเตือนนี้:
ส่ง 'const NSString *' ไปยังพารามิเตอร์ประเภท 'NSString *' เพื่อยกเลิกตัวระบุ
จะประกาศสิ่งเหล่านี้ได้อย่างไร?
คำตอบ:
คุณควรประกาศสตริงคงที่ของคุณดังนี้
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
ไม่มีความหมาย
const
ใช้กับคำที่อยู่ทางซ้ายและนำไปใช้กับคำที่อยู่ทางด้านขวาเฉพาะเมื่อไม่มีสิ่งใดอยู่ทางด้านซ้ายของมัน (เช่นconst char *
และchar const *
ตัวชี้ที่ไม่ใช่ const เพื่อ const char แต่char *const
เป็นตัวชี้ const สำหรับ char ไม่ใช่ )
เพียงวางทั้งหมดในที่เดียวซึ่งพบในโพสต์ต่าง ๆ บน 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
เผื่อเวลาสักครู่ในการอ่าน สิ่งที่ดีสำหรับตัวชี้นรกในค่าคงที่และในทางกลับกัน