Swift 學習- 04 -- 字串和字元

來源:互聯網
上載者:User

標籤:文字檔   獨立   字元集   可擴充   aaa   固定   順序   hello   字元   

// 字串 和 字元

// 字串 是有序的 Character (字元) 類型的值的集合,  通過 String 類型的集合

// swift 的 String 和 Character 類型提供了快速和相容 Unicode 的方式供你的代碼使用, 建立和操作字串的文法與C語言中的字串相似, 輕量並且已讀

 

// 字串串連操作只需要簡單地通過 + 符號將兩個字串串連即可

// 與swift 中其他值一樣, 能否更改字串的值, 取決於其被定義為常量還是變數

 

// 注意:

// swift 的 String 類型與 Foundation NSString 類進行了無縫對接, Foundation 也可以對 String 進行擴充, 暴露在 NSString 中定義的方法 , 這意味著,如果你在 String 中調用這些 NSString 的方法, 將不用進行轉換

var ss = "aaaaaaa"

let bb = ss + "bbbbbb"

print(bb)

 

// 字串字面量

// 字串字面量室友雙引號 ("")包裹著的具有固定順序的文本字元集

// 字串字面量可以為常量或者變數提供初始值

 

 

// 初始化Null 字元串

// 要建立一個Null 字元串作為初始值, 可以將空的字串字面量賦值給變數, 也可以初始化一個新的 String 執行個體

var emptyString = ""    // Null 字元串字面量

var antherEmptyString = String() // 初始化方法

 

// 你可以通過檢查其 Bool 類型的 isEmpty 屬性來判斷改字串是否為空白

if emptyString.isEmpty{

    print("Nothing to see here")

}

 

 

// 字串可變性

// 你可以通過講一個特定字串分配給一個變數來對其進行修改, 或者分配給一個常量保證其不會被修改

// 注意:

// Objective-C 和 Cocoa 中 , 你需要通過選擇兩個不同的類 (NSString 和 NSMutableString) 來指定字串是否可以被修改

 

 

 

// 使用字元

// 你可以通過 for-in 迴圈來遍曆字串中的 characters 屬性來擷取每一個字元的值;

for charcater in "Dog!??".characters {

    print(charcater)

}

 

// 另外,通過表明一個 Character 類型並用字元字面量進行複製, 可以建立一個獨立的字元常量或變數

let exclamationMark: Character = "!"

 

// 字串可以通過傳遞一個實值型別為 Character 的數組作為自變數來初始化

 

let catCahracter: [Character] = ["C","a","t","!","??"]

let catString = String(catCahracter)

print(catString)

 

 

// 連接字串和字元

// 字串可以通過加法運算子 (+) 相加在一起(或稱串連)建立一個新的字串

 

let string1 = "hello"

let string2 = " world"

var welcome = string1 + string2

 

// 你也可以通過加法賦值運算子 (+=) 將一個字串添加到一個已經存在的字串之後

var instryction = "look over"

instryction += string2

 

// 你也可以用 append() 方法講一個字元添加到字串變數的尾部

 

let exclamationmark: Character = "!"

welcome.append(exclamationMark)

welcome.append(string2)

 

// 注意:你不能將一個字串或者字元添加到一個已經存在的字元變數上面,因為字元變數只能包含一個字元

 

 

// 字串插值

// 字串插值是一種構建新字串的方式, 可以再其中包含常量.變數,字面量,和運算式

// 你插入的字串字面量的每一項都在以 反斜線 為 首碼的 圓括弧 內

// 注意:

// 插值字串中寫在括弧內的運算式不能包含非轉義反斜線(\), 並且不能包含 斷行符號 或 分行符號, 不過插值字串可以包含其他字面量

 

 

// Unicode

// swift 的 string 類型是基於 Unicode 標量建立的

// Unicode 標量是對應字元或者修飾符的唯一的 21 位元字,

 

 

// 字串字面量的特殊字元

// 字串字面量可以包含以下特殊字元

// 逸出字元 : \0 (Null 字元) , \\ (反斜線) , \n (分行符號) , \r (斷行符號符)

// \" (雙引號) , \‘ (單引號) , Unicode標量, 寫成\u{n} (u 為小寫) 其中n為任意一到八位十六進位數且可用的 Unicode 位碼

 

 

// 可擴充的字形群集

// 每一個Swift 的 Character 類型代表一個可擴充的字形群, 一個可擴充的字形群是一個或多個可產生人類可讀的字元 Unicode 標量的有序排列

 

 

// 計算字元數量

// 如果想要獲得一個字串中 Character 值的數量, 可以使用字串的 character 屬性的 count 屬性

var word = "cafe"

print("the number of characters in \(word) is \(word.characters.count)")

// 列印輸出 "the number of characters in cafe is 4"

 

 

// 訪問和修改字串

// 你可以通過字串的屬性和方法來訪問和修改他, 當然也可以用下標文法完成

 

// 字串索引

// 每一個 string 值都有一個關聯的索引(index)類型, String.Index, 他對應著字串中的每一個 character 的位置

// 不同的字串可能會佔用不同數量的記憶體空間, 所以要知道 character 的確定位置, 就必須從 string 的開頭遍曆每一個 Unicode 標量直到結尾, 因此,  Swift 的字串不能用整數(interger)做索引

// 使用 startIndex 屬性可以擷取一個 string 的第一個 character 的索引, 使用 endIndex 屬性可以擷取最後一個 character 的後一個位置的索引, 因此 endIndex 不能作為一個字串的有效下標, 如果 string 是空串, startIndex 和 endIndex 是相等的

// 通過調用 string 的 index(before:) 或 index(after:) 方法, 可以立即得到前面或者後面的一個索引, 您還可以通過調用 index(_:offsetBy:) 方法來擷取對應位移量的索引, 這種方法可以避免多次調用 index(before:) 或者 index(after:) 方法

 

let greenting = "Guten Tag!"

print(greenting[greenting.startIndex])

 

greenting[greenting.index(before: greenting.endIndex)]

 

greenting[greenting.index(after: greenting.startIndex)]

 

let index = greenting.index(greenting.startIndex, offsetBy: 7)

greenting[index]

 

 

// 使用 character 屬性的 indices 屬性會建立一個包好全部索引的範圍(Range), 用來在一個字串中訪問單個字元

for index in greenting.characters.indices {

    print("\(greenting[index])")

}

 

// 注意 : 你可以使用startIndex 和 endIndex 屬性或者(index:before), index(after:) 和index:(_:offsetBy:) 方法在任意七個確定並遵循 collection 協議的類型裡面, 如上文所示是使用在 String 中, 您也可以使用在 array, dictionary 和 set 中

 

 

 

// 插入和刪除

// 調用 insert(_:at:) 方法可以在一個字串的指定索引插入一個字元, 調用 insert(contentsOf:at:) 方法可以在一個字串的指定索引插入一個段字串

 

var  welcomeStr = "hello"

welcomeStr.insert("!", at: welcomeStr.endIndex)

 

welcomeStr.insert(contentsOf: " there".characters, at: welcomeStr.index(before: welcomeStr.endIndex))

 

// 調用 remove(at:) 方法可以在一個字串的指定索引刪除一個字元,

// 調用 removeSubrange(_:) 方法可以在一個字串的指定索引刪除一個子字串

 

welcomeStr.remove(at: welcomeStr.index(before: welcomeStr.endIndex))

 

let renge = welcomeStr.index(welcomeStr.endIndex, offsetBy: -6)..<welcomeStr.endIndex

welcomeStr.removeSubrange(renge)

 

// 注意 : 你可以使用 insert(_:at:) , insert(contentsOf:at:) , remove(at:) 和 removeSubrange(_:) 方法在任意一個遵循的並確認的 RangeReplaceableCollection 協議的類型裡面 , 如上文所示是使用在 string 中, 您也可以使用在 Array , dictionary 和 set 之中

 

 

// 比較字串

// swift 提供了三種方式來比較文本值, 字串字元相等, 首碼相等 和 尾碼相等

 

// 字串/字元相等

// 字串/字元可以使用等於操作符(==), 和不等於操作符(!=) 

 

let quotation = "we‘re a lot alike, you and I."

let sameQuotation = "we‘re a lot alike, you and I."

 

if quotation == sameQuotation {

    print("There two strings are considered equal")

}

 

// 首碼/尾碼相等

// 通過調用字串的 hasPrefix(_:) / hasSuffix(_:) 方法來檢查字串是否擁有特定首碼/尾碼, 兩個方法均接受一個 String 類型的參數, 並返回一個布爾值

 

 

// 字串的 Unicode 表示形式

// 當一個 Unicode 字串被寫進文字檔或者其他儲存是, 字串中的 Unicode 標量會用 Unicode 定義的幾種 編碼格式 (encodeing forms) 編碼, 每一個字串中的小塊編碼被稱為 代碼單元 (code units) , 這些包括UTF-8編碼合適(編碼字串為8位的代碼單元), UTF-16, UTF-32

// swift 提供了幾種不同的方式來訪問字串的 Unicode 表示形式

// 你可以利用 for-in 來對字串進行遍曆, 從而以 Unicode 可擴充的字元群集的方式訪問每一個 cahracer 值

 

 

// UTF-8 表示

// 你可以通過 String 的 UTF-8 屬性來訪問他的 UTF-8 表示

Swift 學習- 04 -- 字串和字元

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.