我被触发了这个问题,因为我在这个答案中对NSString使用了一个类别方法来计算特定字符的出现次数:
https://stackoverflow.com/a/15947190/472599
这种方法非常快,通过使用特殊的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,我想确定..
答案 0 :(得分:2)
只是澄清一下:" UniChar"和" unichar" 不是 Unicode字符。它们是UTF-16组件。就像单个字节是UTF-8组件一样,UniChar和unichar是UTF-16组件。单个Unicode字符由一到四个UTF-8组件或一个或两个UTF-16组件组成。
对于ASCII字符,您只需编写
即可unichar semicolon = ';';
答案 1 :(得分:1)
他们是一样的 - 是的,他们是。 将永远相同 - 谁知道。让它们与众不同会破坏很多代码,这是肯定的。