本文章純粹是中文版《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
中的 NSString
和 NSMutableString
型別。不過你不用擔心 String
型別到底是可變還是不可變的。String
是一個值型別,底層的值變化由 Swift 自行完成,程式設計師只需要把它當作 mutable string 來用就可以了。
不過如果與 Foundation 搭配使用的話,那麼只能對應 NSString 的方法,不能對應 NSMutableString 方法。
修改和比較
String
型別可以進行修改,比如使用 =
,
等操作符。
String
型別可以比較。如果使用 ==
操作符,那麼字串使用的是稱為 “規範化相等
” 的規則。規範化相等的定義在後文擴充套件字形叢集
說明。
同理,Character
型別的 ==
`也是規範化相等。
Unicode
String
和 Character
使用 Unicode
儲存資料。這與 Objective-C 是對應的 (NSString 和 unichar)。這裡要說明一下這兩個型別中關於 Unicode 的一些性質了。
Unicode 標量表示
一個 Unicode 標量是一個為字元或者修飾符建立的獨一無二的 21 位數字。
特殊轉義字元:
\0, \\, \t, \n, \r, \", \'
任意的 Unicode 標量:
\u{十六進位制數} // 十六進位制數為 1~8 個十六進位制字元,無需 “0x” 字首
擴充套件字形叢集
原文說明得很複雜很嚴謹,這裡簡單舉例就好。比如一個字母 “é
”,有兩種表示方法:
- 單個 Unicode 標量
é
(LATIN SMALL LETTER E WITH ACUTE, 或者U 00E9
) 表示 - 一個標準的字母
e
( LATIN SMALL LETTER E,或者說 U 0065),以及 COMBINING ACUTE ACCENT 標量 (U 0301
) 表示
這兩種表示方法,作為字元比較或者字串比較時,都是相等的,稱為規範化相等
。
同樣的東西,在韓文中也很常用。
字串的 Unicode 表示法
分別使用 utf8
、utf16
、unicodeScalars
來獲得字元按照三種不同表示法的陣列。
三者返回的分別是UInt8
、Uint16
、Uint32
陣列
常用方法
- 獲取指定位置的字元:
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
型別
写评论
很抱歉,必須登入網站才能發佈留言。