2019年Swift高級語法的學(xué)習(xí)總結(jié)報告_第1頁
2019年Swift高級語法的學(xué)習(xí)總結(jié)報告_第2頁
2019年Swift高級語法的學(xué)習(xí)總結(jié)報告_第3頁
2019年Swift高級語法的學(xué)習(xí)總結(jié)報告_第4頁
2019年Swift高級語法的學(xué)習(xí)總結(jié)報告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

2019年Swift高級語法的學(xué)習(xí)總結(jié)報告1.函數(shù)1.1funcfuncNmae()->(){}這樣就定義了一個函數(shù),它的參數(shù)為空,返回值為空,如果有參數(shù)和返回值直接寫在兩個括號里就可以了1.2參數(shù)需要指明類型,而如果沒有返回值可以不寫->(),返回值只需要寫返回類型,如果寫了返回名稱,可以在函數(shù)調(diào)用后的值用點語法訪問1.3在參數(shù)名稱前可以加上外部參數(shù)名,調(diào)用的時候就可以帶上它了,如果外部參數(shù)名和內(nèi)部參數(shù)名相同則可以直接在內(nèi)部參數(shù)名前加#即可1.4如果跟參數(shù)設(shè)置一個默認(rèn)值,則swift會自動加上外部參數(shù)名,如果不想有在前面用下劃線就可以_,如果默認(rèn)值參數(shù)不在最后則不能省略,在傳參時傳一個下劃線進(jìn)去就可以1.5在最后一個參數(shù)后面加...代表是這個參數(shù)是可變參數(shù)并且類型就是它,參數(shù)個數(shù)至少是0個,在函數(shù)內(nèi)可以使用forin這個參數(shù)獲得這些參數(shù)1.6每個參數(shù)前面其實有一個隱藏的關(guān)鍵字let,如果想讓參數(shù)可變(可賦值)則需要加上var關(guān)鍵字,不過也只是能賦值,因為是值拷貝所以不能修改外部參數(shù)的實際值,如果要變成地址傳遞,需要在參數(shù)前加inout關(guān)鍵字,而實參需要加上&,1.7swift中函數(shù)其實也只是中類型,函數(shù)名就是變量名,比如letfunc1:()->()聲明的就是個無參數(shù)無返回值的函數(shù)類型,所以如果一個函數(shù)返回一個函數(shù)的話和返回一個普通變量沒什么區(qū)別2.閉包2.1閉包代表了一段程序代碼,{(傳入?yún)?shù))->返回值的類型in...表達(dá)式...},函數(shù)只是閉包的一個特例2.2閉包可以推斷返回類型,所以可以省略->返回值類型,參數(shù)類型也可以推到,所以參數(shù)類型也不要,括號也可以去掉,如果閉包只有一個表達(dá)式直接可以省略掉return關(guān)鍵字,因為我們可以用$0/$1簡寫參數(shù),所以參數(shù)也可以省略掉.2.3如果閉包是函數(shù)最后一個參數(shù),則可以去掉小括號,直接用大括號里的內(nèi)容,不過需要大括號緊接著寫,叫尾隨閉包2.4內(nèi)層返回函數(shù)會捕獲外層的變量的值,當(dāng)內(nèi)層函數(shù)返回后,外層函數(shù)的內(nèi)部變量并不會釋放內(nèi)存,它的變量的值會跟著內(nèi)部函數(shù)的執(zhí)行而變化3.枚舉3.1用enumCompassPoint{caseNorth,South,East,West}定義枚舉,可以不用逗號,和聲明語句一樣分開用多個case寫就可以了3.2可以用元組來設(shè)定枚舉對應(yīng)每項中的值,并可以用switchcase中的值綁定來判斷,3.3枚舉類型如果初始化為Int類型,它的下一項也會有一個加1的原始值,不過枚舉直接復(fù)制成string都可以的4.結(jié)構(gòu)體4.1結(jié)構(gòu)題的屬性必須初始化,必須有默認(rèn)值或者通過構(gòu)造器init4.2結(jié)構(gòu)體本身是值傳遞,如果一個結(jié)構(gòu)體賦值給另外一個結(jié)構(gòu)體了也是兩份拷貝,互相修改不會有影響4.3如果一個結(jié)構(gòu)體用let聲明了,那么它內(nèi)部的值就不能再做修改了,var聲明的結(jié)構(gòu)體才能修改4.4但是class不同,對象的賦值會是同一份引用,修改會影響到另外一個對象,但是let聲明的變量也是不能賦值的,只是能修改它內(nèi)部的值而已5.屬性(成員變量)5.1結(jié)構(gòu)體/類在初始化的時候成員變量一定要有值,如果你沒有給出初始化方法,則默認(rèn)有一個包含所有必須初始化的的init方法,如果你提供了,默認(rèn)了就沒有了5.2(延遲屬性)用let聲明的成員變量,就不能再修改了,如果是一個耗時的屬性比如值是一個自定義對象,可以加上lazy屬性,它只有在用到的時候才會對這個屬性做初始化,避免不要的消耗(延遲屬性)5.3(計算屬性)有的屬性是根據(jù)其它的屬性計算出來的,并不是一個必須的屬性,只是讓使用的時候方便了些,在屬性定義后面加上set/get方法,get方法需要返回一個值,set方法有一個參數(shù),用來設(shè)置其它屬性,如果不要參數(shù)就不要寫參數(shù)外面的括號,它就有一個默認(rèn)的參數(shù)newValue5.4如果只有g(shù)et方法就是只讀屬性,只讀屬性swift提供了一種簡寫方式,直接把返回語句寫在最外面的大括號里就可以了5.5swift提供了屬性監(jiān)聽方法:willSet和didSet,兩個都是一樣有一個參數(shù),分別將要設(shè)置的值,和屬性過去的值,同樣你如果不提供參數(shù),會用兩個默認(rèn)的newValue和oldValue.這兩個方法和set/get方法并列,在didSet方法中可以直接修改(調(diào)整)屬性的值,但是這兩個方法不能和set/get方法共存5.6swift中有類別屬性,enum/struct用關(guān)鍵字static,class就用class關(guān)鍵字,在class中l(wèi)et聲明的需要直接賦初始值,var聲明的必須用get方法return,因為swift不允許class儲存類屬性,而enum/struct可以6.函數(shù)(成員方法)6.1class中的函數(shù)都不需要加上外部參數(shù),因為除了第一個參數(shù)都默認(rèn)加上了#符號,不過這只是swift幫你做了點事情而已,它并沒有在語法上強(qiáng)制你做什么,你想為第一個參數(shù)加上外部參數(shù)也行,都用_代替默認(rèn)的外部參數(shù)都可以6.2在swift里self.x不代表會調(diào)用setX/getX方法,所以直接可以在set/get方法里這么用.6.3在struct和enum中,成員方法不允許修改成員變量,如果要修改需要加上mutating關(guān)鍵字,但是如果聲明的結(jié)構(gòu)體變量是一個let常量的話,這個方法也是不允許調(diào)用的.6.4在struct和enum中你可以在mutating方法中直接跟self賦值成另外一個變量6.5在struct和enmu中用static標(biāo)識一個方法是類方法,而class中用class關(guān)鍵字7.角標(biāo)(subscript)7.1重寫subscript,類似于subscript(index:Int)->Int{},里面寫set/get方法,和聲明變量,根據(jù)傳參和返回值來確定下標(biāo)的類型和返回值,重寫了這個方法這個對應(yīng)的類型就可以用角標(biāo)了.7.2subscript方法參數(shù)的個數(shù)對應(yīng)角標(biāo)的個數(shù),例如兩個參數(shù):mar[2,3]8.繼承8.1swift中沒有基礎(chǔ)類,所有不繼承其它類的的類都是基礎(chǔ)類,重寫父類中init方法,要先調(diào)用super的init方法,然后再在后面修改屬性的值,訪問屬性直接用屬性名字就可以了,不用用self等.8.2要重寫屬性和重寫方法類似,直接加個override就好了,在重寫的set/get方法也可以調(diào)用super對應(yīng)的屬性值,或設(shè)置值都可以.8.3覆蓋了didSet屬性監(jiān)視器就不能再覆蓋set/get方法了,跟方法或?qū)傩约由蟜inal關(guān)鍵字可以防止被子類覆蓋9.初始化(init)9.1init方法和普通方法一樣,你需要在init方法中把每個必須要賦值的屬性都賦值,否則會出編譯錯誤,init方法會給每個參數(shù)加上#,不要它的話可以用_,在方法內(nèi)部用self訪問,也可以不用9.2如果你自定義了init方法,那么swift會不再提供默認(rèn)的init方法,你可以自己寫一個init方法,init方法帶不帶參數(shù)什么都是可以的,自己決定就行9.3如果你想一個init方法中調(diào)用另一個init方法,需要加上一個convenience關(guān)鍵字,在這個init方法里就可以調(diào)用另一個init方法了9.4在子類繼承父類的時候,首先需要初始化子類的成員變量,然后才能調(diào)用super的init方法初始化父類的屬性,最后可以修改子類和父類的屬性,如果這個屬性是父類的,在子類中也是用self訪問,因為這個屬性已經(jīng)是它自己的了9.5如果子類一個init方法都沒有提供,那么子類繼承父類所有的構(gòu)造器,可以用父類的init方法初始化9.6在初始化屬性的時候,可以用閉包實現(xiàn),只要在復(fù)制的=后面加上{},你們寫return和其它語句,最后在{}后面加一個()表示閉包立刻執(zhí)行,閉包和屬性的set方法是類似的,只是在最開始提供的10.銷毀方法(deinit)10.1deinit方法會在對象銷毀的時候調(diào)用,可以打印判斷它時候銷毀11.內(nèi)存管理(ARC)11.1可選類型或者普通類型屬性只要對一個對象有一個引用,它的這個對象的引用計數(shù)就要加1,如果兩個對象相互引用就會產(chǎn)生引用循環(huán),所以需要跟其中的一個屬性用關(guān)鍵字weak聲明為弱引用,就是可以設(shè)置為nil11.2一般用weak聲明的用可選類型,因為它引用的可能為nil,如果你在調(diào)用的時候能確定它是有值的,你可以聲明為unowned的普通類型,它的效果是如果你能保證調(diào)用這個屬性時不為nil時,swift建議用unowned,其它都和weak一樣的12.可選鏈(OptionalChaining)12.1對于一個可選類型的屬性可以用?.和!.來訪問,如果確定有值可以用a!.b!.c!.d,如果不確定有值可以用a?.b?.c?.d13.類型轉(zhuǎn)化13.1可以用aisb來判斷對象a是否是b類型,返回值是一個boolean類型的值13.2as可以把普通類型轉(zhuǎn)化,比如double,int,cgfloat之類都可以用它轉(zhuǎn)化13.3可以用as?把之類轉(zhuǎn)化成父類,它的結(jié)果可以是nil或者轉(zhuǎn)型成功,所以結(jié)果是一個可選類型,轉(zhuǎn)化成功后用?.來訪問方法或?qū)傩?也可以做可選綁定.13.4如果一個對象一定可以轉(zhuǎn)化成功,則可以用as!轉(zhuǎn)化,如果轉(zhuǎn)化不成功會報運行時錯誤,比如在一個數(shù)組中全是animal,但是聲明時是anyobject就可以這樣用.14.擴(kuò)展/協(xié)議(categories,extension,protocol)14.1swift的extension沒有名稱,它是擴(kuò)展到所有的實體類的,它不可以增加成員屬性,但是可以增加計算屬性14.2可以在protocol中聲明屬性和方法,可以定義屬性時候是只讀的或者是可讀可寫的14.3可以讓一個extension繼承一個protocol,在里面實現(xiàn)對應(yīng)的方法14.4協(xié)議的類型是protocol15.泛型15.1可以在func或struct后面跟上,在參數(shù)中就可以聲明參數(shù)類型為這個類型,完全可以把它看做是一個類型16.運算符重載16.1在swift中運算符可以重載,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論