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


Swift String.UTF8View用法及代碼示例

結構

String.UTF8View

將字符串內容視為 UTF-8 代碼單元集合的視圖。

聲明

@frozen struct UTF8View

概述

您可以使用字符串的utf8 屬性訪問字符串的 UTF-8 代碼單元視圖。字符串的 UTF-8 視圖將字符串的 Unicode 標量值編碼為 8 位整數。


let flowers = "Flowers 💐"
for v in flowers.utf8 {
    print(v)
}
// 70
// 108
// 111
// 119
// 101
// 114
// 115
// 32
// 240
// 159
// 146
// 144

字符串的 Unicode 標量值最長可達 21 位。要使用 8 位整數表示這些標量值,通常需要多個 UTF-8 代碼單元。


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


for v in flowermoji.utf8 {
    print(v)
}
// 240
// 159
// 146
// 144

在 Unicode 標量值的編碼表示中,第一個之後的每個 UTF-8 代碼單元稱為 continuation byte

UTF8View 元素匹配編碼的 C 字符串

Swift 通過讓您將 String 實例作為 Int8UInt8 指針傳遞給函數來簡化與 C 字符串 API 的互操作。當您使用 String 調用 C 函數時,Swift 會自動創建一個 UTF-8 代碼單元的緩衝區並將指針傳遞給該緩衝區。該緩衝區的代碼單元與字符串的 utf8 視圖中的代碼單元匹配。

以下示例使用 C strncmp 函數來比較兩個 Swift 字符串的開頭。 strncmp 函數采用兩個 const char* 指針和一個整數,指定要比較的字符數。由於字符串在第 14 個字符之前都是相同的,因此僅比較這些字符會導致返回值 0


let s1 = "They call me 'Bell'"
let s2 = "They call me 'Stacey'"


print(strncmp(s1, s2, 14))
// Prints "0"
print(String(s1.utf8.prefix(14))!)
// Prints "They call me '"

將比較的字符數擴展到 15 個包括不同的字符,因此返回非零結果。


print(strncmp(s1, s2, 15))
// Prints "-17"
print(String(s1.utf8.prefix(15))!)
// Prints "They call me 'B"

可用版本

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

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 String.UTF8View。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。