ios - UniChar(来自 CFString)和 unichar(来自 NSString)是一样的吗?

标签 ios objective-c nsstring cfstring

我被触发了这个问题,因为我在这个答案的 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/

相关文章:

ios - Apple 托管的流程更改按需资源资源包

ios - 将双数组添加到 nsmutablearray

ios - 如何组合 2 个键以实现可本地化

ios - 为什么在我尝试在 objective-c 中执行isKindOfClass时这些输出为何不同?

ios - iOS 9 中的 AVAudioRecorder 不工作

ios - 文件名 NSString 在空间中添加不必要的 %20

iphone - 保存用相机拍摄的图像或从相机胶卷中选择的图像时出现长时间延迟 - iPhone

objective-c - 是否可以从 Youtube 视频链接播放音频而不是视频?

ios - xcode 正在创建通用 xcode 存档而不是 iOS App Archive

ios - 在 swift 3 中过滤代词、动词、地名