Swift 學(xué)習(xí)筆記

assert(條件,斷言信息)

斷言被觸發(fā)時(shí)則應(yīng)用終止

空合運(yùn)算符(a??b)對(duì)可選變量a進(jìn)行空判斷,如果a包含一個(gè)值就進(jìn)行解封,否則返回一個(gè)默認(rèn)值b。

表達(dá)式a必須是一個(gè)可選變量

b的類型要和a存儲(chǔ)值的類型保持一致

相當(dāng)于a!=nil?a!:b

區(qū)間運(yùn)算符

for index in 1...5{

print("\(index) * 5 = \(index * 5)")

}



字符串變量可通過(guò)isEmpty屬性來(lái)判斷該字符串是否為空

常量字符串不可以被修改

String類型是值類型,任何情況下,進(jìn)行操作時(shí)都會(huì)對(duì)已有字符串值創(chuàng)建新副本

可遍歷字符串中的charaters屬性來(lái)獲取每一個(gè)字符的值

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

let catString = String(catCharacters)

print(catString)

字符串插值即可以是一個(gè)整形的變量a作為\(a)被插入到一個(gè)字符串常量中。



Unicode是一個(gè)國(guó)際標(biāo)準(zhǔn),用于文本的編碼和表示。

字符串字面量的特殊字符: \"雙引號(hào)

可若站的字符群集作為Character值來(lái)連接或者改變字符串是,并不一定會(huì)更改字符串的字符數(shù)量

可擴(kuò)展的字符群集可以組成一個(gè)或者多個(gè)Unicode標(biāo)量,這意味著不同的字符以及相同字符的不同表示方式可能學(xué)要不同數(shù)量的內(nèi)存空間來(lái)存儲(chǔ),所以Swift中的字符在一個(gè)字符串中并不一定占用相同的內(nèi)存空間數(shù)

每一個(gè)String的值都有一個(gè)關(guān)聯(lián)的索引類型,String.index,它對(duì)應(yīng)著字符串中的每一個(gè)Character的位置

endIndex對(duì)應(yīng)的是獲取String最后一個(gè)Character的后一個(gè)位置的索引

let greeting = "Guten Tag!"

greeting[greeting.startIndex]//G

greeting[greeting.index(before:greeting.endIndex)] ?//!//index(before:)

greeting[greeting.index(after:greeting.startIndex)] //u//index(after)

let index = greeting.index(greeting.startIndex,offsetBy:7)//index(_:offsetBy)

greeting[index] ? //a

使用characters屬性的indices屬性會(huì)創(chuàng)建一個(gè)包含全部索引的范圍

for index in greeting.characters.indices{

print("\(greeting[index])",terminator:"")

}

插入和刪除

insert(contentsOf: ? ?,at: ? ? ? )

remove(at: ? ?)

let range = welcome.index(welcome.endIndex,offsetBy:-6)..<weicome.endIndex

welcome.removeSubrange(range)

可用hasPrefix()來(lái)計(jì)算包含前綴的字符串?dāng)?shù)

可用hasSuffix()來(lái)計(jì)算包含后綴的字符串?dāng)?shù)



創(chuàng)建一個(gè)帶默認(rèn)值的數(shù)組:var threeDouble = Array(repeating:0.0,coutnt:3)

可通過(guò)加法運(yùn)算符來(lái)組合兩種已存在的相同類型數(shù)組

創(chuàng)建一個(gè)空數(shù)組:var a = [Int]()

用數(shù)組字面量構(gòu)造數(shù)組

var shop:[String] = ["Eggs","Milk"]

可用布爾屬性isEmpty檢查count屬性是否為0

還可以利用下標(biāo)一次改變一系列數(shù)據(jù)值:a[4...6] = [1,2]

可用insert(content, at: num)插在具體表項(xiàng)之前

remove(at:)移除數(shù)組中的某一項(xiàng)并返回這個(gè)被移除的數(shù)據(jù)項(xiàng),移除最后一項(xiàng)用removeLast()


集合用來(lái)存儲(chǔ)相同類型并且沒(méi)有確定順序的值,并且確保每個(gè)元素值出現(xiàn)一次

創(chuàng)建一個(gè)空集合:var letters = Set<Character>()

數(shù)組字面量創(chuàng)建集合

var favoriteGenres:Set<String> = ["Rock","Classical","Hip hop"]

Set類型不能從數(shù)組字面量中被單獨(dú)推斷出來(lái),因此Set類型必須顯式聲明

可直接用insert和remove插入和刪除元素

可用contains方法檢查Set中是否包含一個(gè)特定的值

有多種創(chuàng)建不同集合的方法,可參看swift3.0第94頁(yè)


字典簡(jiǎn)直類型一致時(shí)可以不必寫出字典的類型

字典添加新值可以使用一個(gè)恰當(dāng)類型的鍵作為下標(biāo)索引,并且分配恰當(dāng)類型的新值

也可以使用下標(biāo)語(yǔ)法來(lái)改變特定鍵對(duì)應(yīng)的值

可使用updateValue(_:forKey:)更新或者新添值,該函數(shù)還會(huì)返回一個(gè)可選值,用于檢查更新是否成功

if let oldValue = airports.updateValue("Dublin Airport",forKey:"DUB"){

print("the old value for DuB was (oldValue)")

}

removeValue(forKey:)方法可用來(lái)在字典中移除鍵值對(duì),并且返回被移除的值,在沒(méi)有值的情況下返回nil

鍵值對(duì)對(duì)應(yīng)著keys和values

為了以特定的順序遍歷字典的鍵或值,可以對(duì)字典的keys或values屬性進(jìn)行sorted()方法



swift中的switch與C之類的區(qū)別在于,當(dāng)匹配的case分支中的代碼執(zhí)行完畢后,程序會(huì)終止switch語(yǔ)句,而不會(huì)繼續(xù)執(zhí)行下一個(gè)case分支,如果想繼續(xù)執(zhí)行的話可以在末尾添加一個(gè)fallthrough

不像C語(yǔ)言里的switch語(yǔ)句,swift里面為了讓單個(gè)case同時(shí)匹配不同的元素時(shí),需要將這兩個(gè)值組合成一個(gè)復(fù)合匹配,并且用逗號(hào)分開(kāi)

swift允許多個(gè)case匹配同一個(gè)值,如果存在多個(gè)匹配。那么只會(huì)執(zhí)行第一個(gè)被匹配的case分支。

case 分支可以使用where語(yǔ)句來(lái)判斷額外的條件

let a=(1,-1)

switch b{

case let (x,y) where x==y

print("(\(x),\(y)) is on the line x==y")

case let (x,y)where x==-y

print("(\(x),\(y)) is on the line x==-y")

}



要想改變參數(shù)的值,需要在函數(shù)參數(shù)的類型前面加上inout,即使用

輸入輸出參數(shù),調(diào)用函數(shù)時(shí)需要傳入的是變量而不能是常量,函數(shù)參數(shù)中寫的參數(shù)前面應(yīng)加上&


閉包是自包含的函數(shù)代碼塊,可以捕獲的存儲(chǔ)其所在上下文中任意常量和變量的引用

全局函數(shù)是一個(gè)有名字但不會(huì)捕獲任何值的閉包

嵌套函數(shù)是一個(gè)有名字病可以捕獲其封閉函數(shù)域內(nèi)值的閉包

閉包表達(dá)式是可以捕獲其上下文中變量或常量名的匿名閉包

閉包中可變參數(shù)應(yīng)放在參數(shù)列表的最后一位

嵌套函數(shù)中捕獲的外部參數(shù)并修改之后在調(diào)用完外圍函數(shù)之后仍然會(huì)一直保留

swift3.0第136頁(yè)如果你創(chuàng)建了另一個(gè)函數(shù),則會(huì)有屬于其自己的心得變量

當(dāng)一個(gè)閉包作為參數(shù)傳到一個(gè)函數(shù)中,但是這個(gè)閉包在函數(shù)返回時(shí)才被執(zhí)行

我們稱該閉包從函數(shù)中逃逸


當(dāng)使用字符串作為枚舉類型的原始知識(shí),每個(gè)枚舉成員的隱式原始值為該枚舉成員的名稱


結(jié)構(gòu)體和枚舉是值類型,值類型被賦予一個(gè)變量,常量活著被傳遞給一個(gè)函數(shù)的時(shí)候,其值會(huì)被拷貝

當(dāng)把一個(gè)結(jié)構(gòu)體的實(shí)例賦給另一個(gè)時(shí),只是單純的值拷貝,改變另一個(gè)的結(jié)構(gòu)體成員時(shí)不會(huì)對(duì)原實(shí)例的

成員產(chǎn)生影響。


類時(shí)引用類型,引用的是已存在的實(shí)例本身而不是其拷貝

判斷兩個(gè)常量或者變量是否引用同一個(gè)類實(shí)例 ===


存儲(chǔ)屬性:

如果創(chuàng)建了一個(gè)結(jié)構(gòu)體的實(shí)例并將其復(fù)制給一個(gè)常量,則無(wú)法修改

當(dāng)值類型的實(shí)例被聲明為常量時(shí),它的所有屬性也是常量

而屬于飲用類型的類則不一樣,把一個(gè)引用類型的實(shí)例賦給一個(gè)常量后,

仍然可以修改該實(shí)例的變量屬性

延遲存儲(chǔ)屬性必須聲明為變量,因?yàn)閷傩缘某跏贾悼赡茉趯?shí)例構(gòu)造完成之后才會(huì)得到

而常量屬性在構(gòu)造完成之前必須要有初始值

計(jì)算屬性不直接存儲(chǔ)值,而是用getter和setter來(lái)間接獲取和設(shè)置其他屬性或變量的值

調(diào)用類型方法用類名加點(diǎn)

類型屬性是通過(guò)類型本身來(lái)訪問(wèn)的,而不是用實(shí)例


如果你使用閉包來(lái)初始化屬性,請(qǐng)記住在閉包執(zhí)行時(shí),實(shí)例的其它部分都還沒(méi)有初始化。這意味著你不能在閉包里訪問(wèn)其它屬性,即使這些屬性有默認(rèn)值。同樣,你也不能使用隱式的self屬性,或者調(diào)用任何實(shí)例方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容