亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Swift高級語法學習總結

2019-11-14 18:44:57
字體:
來源:轉載
供稿:網友

 

Swift基礎語法學習總結
Swift高級語法學習總結
Swift語法總結補充(一)

 

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久视频免费观看| 欧美日韩国产精品一区| 亚洲欧美三级伦理| 国产视频久久久久| 国产亚洲视频在线观看| 不卡在线观看电视剧完整版| 精品久久久久久久久久久久| 日本19禁啪啪免费观看www| 国产精品爽黄69天堂a| 丝袜情趣国产精品| 日韩在线激情视频| 久久免费福利视频| 国产人妖伪娘一区91| 中文字幕自拍vr一区二区三区| 日韩电影大全免费观看2023年上| 91精品久久久久久久| 日韩一区二区在线视频| 国产精品久久电影观看| 亚洲深夜福利网站| 亚洲一区二区在线播放| 伊人一区二区三区久久精品| 国产在线精品成人一区二区三区| 亚洲视频综合网| 亚洲视频在线观看网站| 久久噜噜噜精品国产亚洲综合| 国产精品wwwwww| 日韩在线免费视频| 视频在线一区二区| 精品二区三区线观看| 中文字幕免费国产精品| 95av在线视频| 国产精品第1页| 爽爽爽爽爽爽爽成人免费观看| 91色p视频在线| 国产成人精品电影久久久| 成人综合国产精品| 国产主播喷水一区二区| 国产精品户外野外| 91丨九色丨国产在线| 亚洲性av在线| 日韩av日韩在线观看| 欧美性xxxx极品hd欧美风情| 久久久久日韩精品久久久男男| 亚洲欧美精品中文字幕在线| 久久精品色欧美aⅴ一区二区| 97精品欧美一区二区三区| 亚洲精品久久久久久久久久久| 亚洲第一网站免费视频| 国产日韩专区在线| 国产精品一区二区三区久久久| 国产精品入口夜色视频大尺度| 51精品国产黑色丝袜高跟鞋| 国产精品18久久久久久麻辣| 2019国产精品自在线拍国产不卡| 国产精品日韩在线一区| 日韩av一区在线观看| 欧美伊久线香蕉线新在线| 日韩成人在线视频观看| 91久久久久久久| 欧美大成色www永久网站婷| 国产精品91一区| 欧美激情国产日韩精品一区18| 麻豆国产精品va在线观看不卡| 久久久久久久久久国产| 国产精品激情av在线播放| 国产精品一区av| 欧美一区二区三区免费视| 欧洲日本亚洲国产区| 91精品国产成人www| 亚洲图片在线综合| 正在播放欧美一区| 精品视频在线导航| 亚洲精品一区二区久| 欧美在线一级va免费观看| 911国产网站尤物在线观看| 最新中文字幕亚洲| 久久久影视精品| 欧洲精品久久久| 欧美有码在线观看| 久久久久久久一区二区三区| 日韩av网址在线观看| 亚洲第一精品夜夜躁人人爽| 中文字幕视频在线免费欧美日韩综合在线看| 国产精品一区二区3区| 在线日韩日本国产亚洲| 欧美国产日韩一区二区三区| 色小说视频一区| 欧美激情网友自拍| 操人视频在线观看欧美| 国产不卡av在线| 亚洲成avwww人| 91久久久在线| 欧美极品欧美精品欧美视频| 亚洲一区久久久| 国产91热爆ts人妖在线| 欧美午夜精品在线| 国产免费一区二区三区在线观看| 国模叶桐国产精品一区| 在线视频国产日韩| 午夜精品久久久久久久久久久久久| 国产伦精品一区二区三区精品视频| 亚洲精品电影久久久| 中国人与牲禽动交精品| 热久久美女精品天天吊色| 国产一区二区三区直播精品电影| 日韩人体视频一二区| 亚洲福利小视频| 国产一区二区三区在线免费观看| 日韩国产高清污视频在线观看| 日韩欧美中文字幕在线观看| 国外成人在线直播| 亚洲乱码一区二区| 亚洲欧美日韩在线高清直播| 97成人精品区在线播放| 国产精品久久久久久久久久久久久久| 色偷偷噜噜噜亚洲男人的天堂| 欧美电影院免费观看| 日韩免费av片在线观看| 国产精品国产三级国产aⅴ9色| 日韩高清av一区二区三区| 久久伊人色综合| 精品中文字幕在线2019| 欧美性少妇18aaaa视频| 日韩成人av网| 26uuu另类亚洲欧美日本老年| 国产精品亚洲自拍| 国产精自产拍久久久久久| 在线国产精品视频| 国产91网红主播在线观看| 欧美激情综合亚洲一二区| 日本高清视频精品| 国产精品久久久久久久久久新婚| 九色精品免费永久在线| 影音先锋日韩有码| 日韩精品在线影院| 午夜精品久久久久久久久久久久| 国产精品福利片| 91麻豆国产精品| 久久精品成人欧美大片古装| 宅男66日本亚洲欧美视频| 亚洲欧美激情在线视频| 欧美激情2020午夜免费观看| 国语自产精品视频在线看抢先版图片| 国产丝袜一区二区三区| 国产欧美日韩专区发布| 欧美怡春院一区二区三区| 亚洲国产第一页| 美日韩精品免费观看视频| 亚洲japanese制服美女| 亚洲男人天天操| 中日韩美女免费视频网址在线观看| 91精品在线观看视频| 欧美电影免费观看大全| 亚洲国产天堂久久综合| 亚洲精品456在线播放狼人| 久久这里有精品| 国产精品88a∨| 国产日韩在线视频| 国产精品入口尤物| 成人免费淫片aa视频免费| 日韩欧美成人网| 日韩影视在线观看| xxxx欧美18另类的高清| 亚洲va男人天堂|