我在 Swift 的 String 檔案(https://developer.apple.com/documentation/swift/string)中找到了這句話
概述
字串是形成集合的一系列字符,例如“Swift”。Swift 中的字串是 Unicode 正確且不區磁區域設定的,并且被設計為高效。String 型別與 Objective-C 類 NSString 橋接,并提供與使用字串的 C 函式的互操作性。
但是,我無法百分百理解,我不知道從哪里開始。
uj5u.com熱心網友回復:
稍微擴展@matt的答案:
在Unicode協會保持一定的標準進行資料的互操作,以及最知名的標準之一是Unicode字串標準。該標準定義了大量角色及其屬性,以及這些角色如何相互互動的規則。(如馬特筆記:字母、表情符號、組合字符 [帶變音符號的字母,如é等)
Swift 字串是“Unicode 正確的”意味著 Swift 字串符合這個 Unicode 標準,提供與任何其他符合相同標準的字串實作相同的字符、規則和互動。如今,作為許多字串實作已經遵循的主要標準,這在很大程度上意味著 Swift 字串將按照您期望的方式“正常作業”。
但是,除了字符定義之外,Unicode 還定義了許多關于如何執行某些常見字串操作的規則,例如大寫和小寫字串,或對它們進行排序。這些規則可能非常具體,并且在許多情況下,完全取決于背景關系(例如,語言環境,或文本可能屬于或顯示的語言和區域)。例如:
- 案例轉換:
- 在英文中,
i("LATIN SMALL LETTER I" in Unicode)的大寫形式是I("LATIN CAPITAL LETTER I"),反之亦然 - 然而,在土耳其語中,大寫形式
i實際上是?("LATIN CAPITAL LETTER I WITH DOT ABOVE"),而I("LATIN CAPITAL LETTER I")的小寫形式是?("LATIN SMALL LETTER DOTLESS I")
- 在英文中,
- 整理(排序):
- 在英語中,字母
?(“LATIN CAPITAL LETTER A WITH RING ABOVE”)在很大程度上被認為與字母A(“LATIN CAPITAL LETTER A”)相同,只是帶有修飾符。在串列中排序,以 開頭的單詞?將與其他A單詞一起出現,但在B單詞之前 - 然而,在某些斯堪的納維亞語言中,
?是它自己的字母,不同于A. 在丹麥語和挪威語中,?位于字母表的末尾:... X, Y, Z, ?, ?, ?. 在瑞典語和芬蘭語中,字母表以: 結尾... X, Y, Z, ?, ?, ?。對于這些語言,以 開頭的單詞?將出現在Z串列中的單詞之后
- 在英語中,字母
為了以對使用各種語言的用戶有意義的方式執行許多字串操作,這些操作需要在他們的語言和區域設定的背景關系中執行。
在檔案描述的背景關系中,“locale-insensitive”意味著 Swift 字串不提供此類特定于區域設定的規則,并且默認為 Unicode 的默認大小寫轉換、大小寫折疊和排序規則(實際上是:英語)。因此,在需要正確處理這些內容的背景關系中(例如,您正在撰寫本地化應用程式),您將需要使用 Foundation 對 String 方法的擴展,這些方法確實需要Locale正確處理:
localizedUppercase/uppercased(with locale: Locale?)剛剛結束uppercased()localizedLowercase/lowercased(with locale: Locale?)剛剛結束lowercased()localizedStandardCompare(_:)/compare(_:options:range:locale:)剛剛結束<
其中。
uj5u.com熱心網友回復:
它基本上只是意味著 Swift 字串是 Unicode 字串。Swift 字串“字符”是 Unicode 意義上的字符:一個字母、一個表情符號、一個字母和變音符號的組合,等等。字串不僅可以看作是一個字符序列,還可以看作是一個 UTF8、16 或 32 個代碼點的序列。“不區分語言環境”的東西意味著它們沒有依賴于語言環境的編碼,就像字串在 Unicode 之前糟糕的過去那樣。
這是令人愉快的,但它有一些缺點,最值得注意的是作為字符序列的字串不能直接被整數索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/406433.html
標籤:
