比较Objective-C常量字符与NSString

比较Objective-C常量字符与NSString,objective-c,nsstring,const-char,Objective C,Nsstring,Const Char,我想知道是否有一种简单的方法可以将常量字符与NSString进行比较,或者在执行此操作之前必须将常量字符转换为NSString 我一直在看苹果的文档,但很难找到我的问题的答案。你在比较两个不同的东西,所以你必须把一个转换成另一个。转换的方式取决于您。您正在比较两种不同的东西,因此必须将一种转换为另一种。转换的方式取决于您。或者 NSString *str = @"string"; const char *myChar = "some string"; if (strcmp(myChar, st

我想知道是否有一种简单的方法可以将常量字符与
NSString
进行比较,或者在执行此操作之前必须将常量字符转换为
NSString


我一直在看苹果的文档,但很难找到我的问题的答案。

你在比较两个不同的东西,所以你必须把一个转换成另一个。转换的方式取决于您。

您正在比较两种不同的东西,因此必须将一种转换为另一种。转换的方式取决于您。

或者

NSString *str = @"string";
const char *myChar = "some string";
if (strcmp(myChar,  str.UTF8String))

核心基础路线也是一种选择:

CFStringRef myStr = CFSTR("some chars");

bool result = CFStringCompareWithOptions(myStr, ((__bridge CFStringRef)str),CFRangeMake(0,CFStringGetLength(myStr)), kCFCompareCaseInsensitive);
或者

核心基础路线也是一种选择:

CFStringRef myStr = CFSTR("some chars");

bool result = CFStringCompareWithOptions(myStr, ((__bridge CFStringRef)str),CFRangeMake(0,CFStringGetLength(myStr)), kCFCompareCaseInsensitive);
更好的是:

 [str isEqualToString: @(myChar) ];
这并不比强制转换更糟糕,因为类型是不可通约的,所以您必然需要强制转换。

更好的是:

 [str isEqualToString: @(myChar) ];

这并不比强制转换更糟糕,因为类型是不可通约的。是否有不想创建NSString的原因?是否有不想创建NSString的原因?您的意思是
strcmp
,或者您忘记了
strncp
的参数。看起来像
if(strcmp>)(myChar,str.UTF8String))
应该是
if(strcmp(myChar,str.UTF8String)==0)
如果您想检查字符串是否相等。您的意思是
strcmp
或者您忘记了
strncmp
。看起来像
if(strcmp(myChar,str.UTF8String))
应该是
if(strcmp(myChar,str.UTF8String)==0)如果你想检查字符串是否相等。实际上,这比一个演员好得多。只有核心基础类型的一个子集可以安全地来回转换到ObjObjutsCuffDAFI:因为我怀疑原始海报来自C/C++背景,我的意思是“不比合法的和安全的演员差”。(Objc习惯对铸造更宽容,因为运行时支持更好),这比铸造要好得多。只有核心基础类型的一个子集可以安全地来回返回到ObjObjutsCuffDAFI:因为我怀疑原始海报来自C/C++背景,我是说。“不比合法和安全的强制转换差”,这仍然是不推荐的,但可以容忍。(ObjC定制对强制转换的容忍度要高得多,因为运行时支持更好)