【问题标题】:Compare Objective-C const char with NSString比较 Objective-C const char 和 NSString
【发布时间】:2013-02-28 21:20:01
【问题描述】:

我想知道是否有一种简单的方法可以将 const char 与 NSString 进行比较,还是必须先将 const char 转换为 NSString

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

【问题讨论】:

  • 您是否有不想创建 NSString 的原因?

标签: objective-c nsstring const-char


【解决方案1】:

要么

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

[str isEqualToString:[NSString stringWithUTF8String:myChar]];

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

CFStringRef myStr = CFSTR("some chars");

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

【讨论】:

  • 要么你的意思是strcmp,要么你忘记了strncmp的参数。
  • 如果您想检查字符串是否相等,看起来 if (strcmp(myChar, str.UTF8String)) 应该是 if (strcmp(myChar, str.UTF8String) == 0)cplusplus.com/reference/cstring/strcmp
【解决方案2】:

更好:

 [str isEqualToString: @(myChar) ];

这并不比强制转换差,因为类型是不可通约的,所以你肯定需要它。

【讨论】:

  • 实际上,这比演员阵容要好几英里。只有核心基础类型的子集可以安全地来回转换为 ObjC 对象
  • CodaFi:由于我怀疑原始海报来自 C/C++ 背景,我的意思是“不比合法且安全的演员阵容差”,这仍然被弃用但被容忍。 (ObjC 自定义对转换的容忍度要高得多,因为运行时支持更好)
【解决方案3】:

您正在比较两种不同的事物,因此您必须将一种转换为另一种。采用哪种转换方式取决于您。

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 2023-03-11
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多