當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。