直接访问Swift';s UTF-16编码单元

直接访问Swift';s UTF-16编码单元,swift,Swift,我需要直接访问Swift字符串的底层UTF-16代码单元。虽然可以通过以下方式获取指向UTF-8 C字符的指针: string.utf8CString.withUnsafeBufferPointer { utf8chars in ... } UTF-16代码单元似乎没有任何等价物,这很奇怪,因为Swift字符串在内部存储为UTF-16 我能得到的最接近的方法是将UTF16视图包装在一个数组中: ContiguousArray(string.utf16).withUnsafeBuffer

我需要直接访问Swift字符串的底层UTF-16代码单元。虽然可以通过以下方式获取指向UTF-8 C字符的指针:

string.utf8CString.withUnsafeBufferPointer { utf8chars in
    ...
}
UTF-16代码单元似乎没有任何等价物,这很奇怪,因为Swift字符串在内部存储为UTF-16

我能得到的最接近的方法是将UTF16视图包装在一个数组中:

ContiguousArray(string.utf16).withUnsafeBufferPointer { utf16units in
    ...
}
但这比直接访问代码单元要慢得多


是否有某种隐藏的方法可以获取我所缺少的底层UTF-16代码单元?

字符串在内部以unicode标量值的形式存储(每单位21位),并且您可以访问的是字符,这些字符由于超过1个unicode标量值而具有不同的字节长度。我想你把它和NSString@Knight0fDragon:从源代码中我记得,字符在内部存储为字节(对于纯ASCII字符串)或UTF-16代码单位,但我当然可能错了。@MartinR我在看苹果文档,
幕后,Swift的本机字符串类型是从Unicode标量值构建的。Unicode标量是字符或修饰符的唯一21位数字,例如U+0061表示拉丁文小写字母A(“A”),或U+1F425表示正面小鸡(“Knight0fDragon:我正在查看:”高度优化字符串的核心实现,可存储ASCII和UTF-16,并可包装本机Swift _StringBuffer或NSString实例”。字符串本机内部存储为unicode标量值(每单位21位),并且您可以访问的是字符,由于其长度超过1个unicode标量值,因此可能具有不同的字节长度NSString@Knight0fDragon:根据我在源代码中的记忆,字符在内部存储为字节(对于纯ASCII字符串)或者UTF-16代码单位,但我可能是错的。@MartinR我在看apple docs,
在幕后,Swift的原生字符串类型是由Unicode标量值构建的。Unicode标量是字符或修饰符的唯一21位数字,如U+0061表示拉丁小写字母A(“A”),或U+1F425表示正面小鸡(“@Knight0fDragon:我正在研究:“一个高度优化的字符串的核心实现,它可以存储ASCII和UTF-16,并且可以包装本机Swift\u StringBuffer或NSString实例”。