我被触发了这个问题,因为我在这个答案的 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,我想确定..
最佳答案
澄清一下:“UniChar”和“unichar”都不是 Unicode 字符。它们是 UTF-16 组件。就像单字节是 UTF-8 组件一样,UniChar 和 unichar 是 UTF-16 组件。单个 Unicode 字符由一到四个 UTF-8 组件或一到两个 UTF-16 组件组成。
对于 ASCII 字符,你可以写
unichar semicolon = ';';
关于ios - UniChar(来自 CFString)和 unichar(来自 NSString)是一样的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22455577/