Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UniChar(来自CFString)和UniChar(来自NSString)是否相同?_Ios_Objective C_Nsstring_Cfstring - Fatal编程技术网

Ios UniChar(来自CFString)和UniChar(来自NSString)是否相同?

Ios UniChar(来自CFString)和UniChar(来自NSString)是否相同?,ios,objective-c,nsstring,cfstring,Ios,Objective C,Nsstring,Cfstring,我被触发到这个问题是因为我使用了这个答案中NSString的category方法来计算特定字符的出现次数: 通过使用特殊的CFString方法枚举字符串的内容,此方法非常快速。它需要一个UniChar作为参数。为了获得UniChar,我使用了: unichar semicolon = [@";" characterAtIndex: 0]; 因为我在NSString中找不到任何给我一个UniChar的东西 编译器不会对此抱怨(传递unichar而不是unichar) 这些类型的定义如下: //

我被触发到这个问题是因为我使用了这个答案中NSString的category方法来计算特定字符的出现次数:

通过使用特殊的CFString方法枚举字符串的内容,此方法非常快速。它需要一个UniChar作为参数。为了获得UniChar,我使用了:

unichar semicolon = [@";" characterAtIndex: 0];
因为我在NSString中找不到任何给我一个UniChar的东西

编译器不会对此抱怨(传递unichar而不是unichar)

这些类型的定义如下:

// in MacTypes.h
typedef UInt16                          UniChar;
// and:
typedef unsigned short                  UInt16;

// in NSString.h:
typedef unsigned short                  unichar;
所以这些类型现在看起来是一样的(iOS 7.1)。但是我们能期待永远都是这样吗? 看到NSInteger在移动到64位时从int变为long,我想确定它们是一样的吗?是的。它们会永远一样吗?谁知道呢。让它们不同肯定会破坏很多代码。

只是想澄清一下:“UniChar”和“UniChar”不是Unicode字符。它们是UTF-16组件。就像单个字节是UTF-8组件一样,UniChar和UniChar是UTF-16组件。单个Unicode字符由一到四个UTF-8组件或一到两个UTF-16组件组成

对于ASCII字符,您只需编写

unichar semicolon = ';';
它们是UCS-2字符:)在某种程度上,它是Unicode的同义词,但不再是。然而,出于实际目的,基本多语言环境之外的字符极为罕见。NSString也不是Unicode字符串——它们是unichar的数组
length
返回unichars的数量,而不是Unicode代码点的数量。