Swift 個人學習筆記 – 04: 字串和字元

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

本文章純粹是中文版《The Swift Programming Language》的學習筆記,所以絕大部分的內容都是文中有的。本文是本人的學習筆記,不是正式系統的記錄。僅供參考

以下還是有很多沒看懂、不確定的地方,我會以“存疑”的註解指出。

在此感謝中文版翻譯者,這極大地加快了 Swift 的學習速度。

本文地址:https://segmentfault.com/a/1190000008369289


Reference:

原版:The Swift Programming Language
中文版:Swift 3 程式語言

概述

字串在 Swift 裡面其實是 String 物件,而不是基本資料型別。不過說實話,個人覺得在 Swift 裡面基本資料型別和物件的差別並沒有那麼明顯(不確定)。

字元在 Swift 裡面則是 Character,到底是物件還是基本資料型別,本人目前還不是很清楚。

字串和字元的建立和修改

建立和訪問

字串和字元的最基本建立方式,就是直接像普通變數那樣建立就可以(常量我就忽略啦):

var aStr = "Hello string"
var aChr = "H"
var aEmptyStr = String()
var anotherEmptyStr = ""

字串可以說是對應著 Objective-C 中的 NSStringNSMutableString 型別。不過你不用擔心 String 型別到底是可變還是不可變的。String 是一個值型別,底層的值變化由 Swift 自行完成,程式設計師只需要把它當作 mutable string 來用就可以了。

不過如果與 Foundation 搭配使用的話,那麼只能對應 NSString 的方法,不能對應 NSMutableString 方法。

修改和比較

String 型別可以進行修改,比如使用 =, 等操作符。

String 型別可以比較。如果使用 == 操作符,那麼字串使用的是稱為 “規範化相等” 的規則。規範化相等的定義在後文擴充套件字形叢集說明。

同理,Character 型別的 == `也是規範化相等。

Unicode

StringCharacter 使用 Unicode 儲存資料。這與 Objective-C 是對應的 (NSString 和 unichar)。這裡要說明一下這兩個型別中關於 Unicode 的一些性質了。

Unicode 標量表示

一個 Unicode 標量是一個為字元或者修飾符建立的獨一無二的 21 位數字。

特殊轉義字元:

\0, \\, \t, \n, \r, \", \'

任意的 Unicode 標量:

\u{十六進位制數}    // 十六進位制數為 1~8 個十六進位制字元,無需 “0x” 字首

擴充套件字形叢集

原文說明得很複雜很嚴謹,這裡簡單舉例就好。比如一個字母 “é”,有兩種表示方法:

  1. 單個 Unicode 標量 é (LATIN SMALL LETTER E WITH ACUTE, 或者 U 00E9) 表示
  2. 一個標準的字母 e ( LATIN SMALL LETTER E,或者說 U 0065),以及 COMBINING ACUTE ACCENT 標量 (U 0301) 表示

這兩種表示方法,作為字元比較或者字串比較時,都是相等的,稱為規範化相等
同樣的東西,在韓文中也很常用。

字串的 Unicode 表示法

分別使用 utf8utf16unicodeScalars 來獲得字元按照三種不同表示法的陣列。
三者返回的分別是UInt8Uint16Uint32陣列

常用方法

  • 獲取指定位置的字元aStr[位置]
  • 獲取字元陣列String.characters
  • unicode 表示的字串長度aStr.characters.count,或者 aStr.endIndex
  • 插入字元insert(_:at:),比如:aStr.insert("!", at:aStr.endIndex)
  • 插入字串insert(contentsOf:at:),比如:aStr.insert(contentsOf:"!!!", at: aStr.endIndex)
  • 刪除字串remove(at:),引數是 Range 型別

下一篇

Swift 個人學習筆記 – 05: 集合型別(Array, Set, Dictionary)

相關文章

IOS開發 最新文章