Swift學習筆記之字串(二)

2021-07-04 10:24:28 字數 3733 閱讀 3647

string 中的字串是值型別,傳遞的時候會對值進行拷貝,而 nsstring 的字串傳遞則是引用。我們可以用 for in 遍歷字串:

var a : string = "a"

for c in

"hello"

可以通過 countelements 計算字串的字元數量:

countelement("1234567")

// 7

不過要注意的是,countelements 和 nsstring 的 length 並不總是完全一樣的值,因為 length 利用的是 utf-16 型別的值,而不是 unicode 字元。比如 emoji 表情加進去之後,utf-16 算的結果是2,而 unicode 的計算結果是1。可以看下面這個例子:

var a = "hello��"

countelements(a) //6 - unicode

a.utf16count //7 - utf16

可以用 utf8 獲取 utf-8 的表示,同樣,可以用 utf16 獲取 utf-16 的表示:

var b = "heelo��"

for c in b.utf8

for c in utf16

如果要獲取 unicode 標量可以用 unicodescalars 來獲取:

for scalar in b.unicodescalars
我們沒有辦法直接用 str[0…4] 來擷取子串,因為 string 的 subscript 的引數必須是 string.index 的:

subscript(i: string.index) -> character

subscript(subrange: range

) -> string

要獲取 substring 的話需要這樣:

let digits = "0123456789"

let position = 3

let index = advance(digits.startindex, position)

let character = digits[index] //

->

"3"

或者用 substringwithrange 方法:

var str = "abcdefg"

str.substringwithrange(range(start: advance(str.startindex,2), end: str.endindex))

其中, advance(i, n) 等價於 i++n,只需要傳乙個 forwardindextype 的值,就可以返回 i 往後的第 n 個值。比如 advance(1, 2) 返回的是 1+2 也就是3。

我們可以通過 extension 的方式給 string 加上整數型別的下標:

var digits = "12345678901234567890"

extension string

subscript(integerrange: range) -> string

}digits[5] // works now

digits[4...6] // works now

可以用 rangeofstring() 來判斷是否包含子串:

var mystring = "swift is really easy!"

if mystring.rangeofstring("easy") != nil

把陣列裡的值拼接成字串是經常遇到的情況。我們可以用遍歷拼接所有元素:

let animals = ["cat", "dog", "turtle", "swift", "elephant"]

var result: string = ""

for animal in animals

result += animal

}result

// "cat,dog,turtle,swift,elephant"

當然也有更簡單的方式,join 函式:

println("a list of animals: " + ",".join(animals))
可以用 map 給每個元素都加個列表標記:

println("\n".join(animals.map()))
可以用 capitalizedstring 將字串首字母大寫:

let capitalizedanimals = animals.map()

println("\n".join(capitalizedanimals.map()))

可以通過 sorted() 方法對陣列內的元素進行排序:

let sortedanimals = animals.sorted()

println

("\n".join(sortedanimals.map()))

你可以通過自定義運算子的方式來實現字串 n 的效果,就像是 3 5=15 這樣:

func *(string: string, scalar: int) -> 

string

println("cat "*3

+"dog "*2)

// cat cat cat dog dog

基於 foundation ,我們可以用 componentsseparatedbystring 把字串分解成陣列:

import foundation

var mystring = "berlin, paris, new york, san francisco"

var myarray = mystring.componentsseparatedbystring(",")

//returns an array with the following values: ["berlin", " paris", " new york", " san francisco"]

如果你希望基於多個字元進行分解,那需要使用另乙個方法:

import foundation

var mystring =

"one-two-three-1 2 3"

vararray : [

string

]= mystring.componentsseparatedbycharactersinset(nscharacterset (charactersinstring: "- "))

//returns

["one", "two", "three", "1", "2", "3"

]

如果不希望基於 foundation 進行分解,可以使用全域性函式 split():

var str = "today is so hot"

let arr = split(str, , maxsplit: int.max, allowemptyslices: false)

println(arr) // [today, is, so, hot]

Swift心得筆記之字串

字串 簡介string 中的字串是值型別,傳遞的www.cppcns.com時候會對值進行拷貝,而 nsstring 的字串傳遞則是引用。我們可以用 for in 遍歷字串 複製 如下 var a string a for c in hello 可以通過 countelements 計算字串的字元數...

Swift 學習之字串和字元

swift 學習之字串和字元 1.建立字串 2.初始化空字元 2.1 方法1 let emptystring 2.2 方法2 string 構造方法 let anotheremptystring string 這兩個字串都為空,並且兩者等價 3.判斷字串是否為空 if emptystring.ise...

swift 過濾字串 Swift 字串

swift 字串 swift 字串是一系列字元的集合。例如 hello,world 這樣的有序的字元型別的值的集合,它的資料型別為 string。建立字串 你可以通過使用字串字面量或 string 類的例項來建立乙個字串 import cocoa 使用字串字面量 var stringa hello,...