当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Swift String.UTF16View用法及代码示例

结构

String.UTF16View

将字符串内容视为 UTF-16 代码单元集合的视图。

声明

@frozen struct UTF16View

概述

您可以使用字符串的utf16 属性访问字符串的 UTF-16 代码单元视图。字符串的 UTF-16 视图将字符串的 Unicode 标量值编码为 16 位整数。


let flowers = "Flowers 💐"
for v in flowers.utf16 {
    print(v)
}
// 70
// 108
// 111
// 119
// 101
// 114
// 115
// 32
// 55357
// 56464

构成字符串内容的 Unicode 标量值最长可达 21 位。较长的标量值可能需要两个 UInt16 值进行存储。那些 “pairs” 的代码单元称为 surrogate pairs


let flowermoji = "💐"
for v in flowermoji.unicodeScalars {
    print(v, v.value)
}
// 💐 128144


for v in flowermoji.utf16 {
    print(v)
}
// 55357
// 56464

要将 String.UTF16View 实例转换回字符串,请使用 String 类型的 init(_:) 初始化程序。


let favemoji = "My favorite emoji is 🎉"
if let i = favemoji.utf16.firstIndex(where: { $0 >= 128 }) {
    let asciiPrefix = String(favemoji.utf16[..<i])!
    print(asciiPrefix)
}
// Prints "My favorite emoji is "

UTF16View 元素匹配 NSString 字符

字符串的 utf16 视图的 UTF-16 代码单元匹配通过索引 NSString API 访问的元素。


print(flowers.utf16.count)
// Prints "10"


let nsflowers = flowers as NSString
print(nsflowers.length)
// Prints "10"

然而,与 NSString 不同,String.UTF16View 不使用整数索引。如果您需要访问 UTF-16 视图中的特定位置,请使用 Swift 的索引操作方法。以下示例访问 flowersnsflowers 字符串中的第四个代码单元:


print(nsflowers.character(at: 3))
// Prints "119"


let i = flowers.utf16.index(flowers.utf16.startIndex, offsetBy: 3)
print(flowers.utf16[i])
// Prints "119"

尽管 Swift 覆盖更新了许多 Objective-C 方法以返回本机 Swift 索引和索引范围,但有些仍然返回 NSRange 的实例。要将 NSRange 实例转换为 String.Index 的范围,请使用 Range(_:in:) 初始化程序,它将 NSRange 和字符串作为参数。


let snowy = "❄️ Let it snow! ☃️"
let nsrange = NSRange(location: 3, length: 12)
if let range = Range(nsrange, in: snowy) {
    print(snowy[range])
}
// Prints "Let it snow!"

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 String.UTF16View。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。