swift學(xué)習(xí)筆記 - swift中常用關(guān)鍵字

swift中常用關(guān)鍵字
  • **用作聲明的關(guān)鍵字: **

class干跛、deinitenum锈锤、extension驯鳖、func闲询、importinit浅辙、let扭弧、protocolstatic记舆、struct鸽捻、subscripttypealias泽腮、var

  • 用作語句的關(guān)鍵字

break御蒲、casecontinue诊赊、default厚满、doelse碧磅、fallthrough碘箍、ifin鲸郊、for丰榴、returnswitch秆撮、where四濒、while

  • 用作表達和類型的關(guān)鍵字:

asdynamicType职辨、new盗蟆、issuper拨匆、self姆涩、SelfType惭每、__COLUMN__骨饿、__FILE____FUNCTION__台腥、__LINE__

  • 特定上下文中被保留的關(guān)鍵字:

associativity宏赘、didsetget黎侈、infix察署、inoutleft峻汉、mutating贴汪、none脐往、nonmutatingoperator扳埂、override业簿、postfixprecedence阳懂、prefix梅尤、rightsetunowned岩调、unowned(sale)巷燥、unowned(unsafe)weak号枕、willset


關(guān)鍵字作用 :

class : 用來聲明一個類
enum : 用來聲明一個枚舉
init : 相對于類的釋構(gòu)方法的修飾缰揪。
deinit : 相對于類的釋構(gòu)方法的修飾。
對于類的構(gòu)造和釋構(gòu)在swift 中需要使用關(guān)鍵詞來修飾堕澄,而很多高級語言并不需要特別的指定邀跃,便C++ 只需要類名與構(gòu)造函數(shù)名相同就可以,不需要額外的關(guān)鍵詞蛙紫。
extension : 擴展.類似于OC的categories.
1. Swift 中的可以擴展以下幾個:
2. 添加計算型屬性和計算靜態(tài)屬性
3. 定義實例方法和類型方法
4. 提供新的構(gòu)造器
5. 定義下標(biāo)
6. 定義和使用新的嵌套類型
7. 使一個已有類型符合某個接口
let : 聲明一個常量. 類似于const
protocol : 協(xié)議.也可以叫接口.這個往往在很多高級語言中不能多重繼承的情況下使用協(xié)議是一個比較好的多態(tài)方式。
static : 聲明靜態(tài)變量或者函數(shù)
struct : 聲明定義一個結(jié)構(gòu)體
subscript : 下標(biāo)索引修飾.可以讓class途戒、struct坑傅、以及enum使用下標(biāo)訪問內(nèi)部的值
typealias : 為此類型聲明一個別名.和 typedef類似.
break : 跳出循環(huán).一般在控制流中使用,比如 for . while switch等語句
case : switch的選擇分支.
continue : 跳過本次循環(huán),繼續(xù)執(zhí)行后面的循環(huán).
in : 范圍或集合操作,多用于遍歷.
fallthrough : swift語言特性switch語句的break可以忽略不寫,滿足條件時直接跳出循環(huán).fallthrough的作用就是執(zhí)行完當(dāng)前case,繼續(xù)執(zhí)行下面的case.類似于其它語言中省去break里,會繼續(xù)往后一個case跑喷斋,直到碰到break或default才完成的效果.

switch integerToDescribe {  
case 1, 3, 5, 7, 11, 13, 17, 19:  
    description += " a prime number, and also";  
    fallthrough      // 執(zhí)行到此并不跳出循環(huán),而是繼續(xù)執(zhí)行case5
case 5:  
    description += " an integer"    // 執(zhí)行到這一步,跳出循環(huán)
default :  
    description += " finished"  
}  

where : 用于條件判斷,和數(shù)據(jù)庫查詢時的where 'id > 10'這樣功能. swift語言的特性.OC中并沒有.

let yetAnotherPoint = (1, -1)  
switch yetAnotherPoint {  
case let (x, y) where x == y:  
println("(\\(x), \\(y)) is on the line x == y")  
case let (x, y) where x == -y:  
println("(\\(x), \\(y)) is on the line x == -y")  
case let (x, y):  
println("(\\(x), \\(y)) is just some arbitrary point")  

當(dāng)switch的條件滿足where 后面的條件時唁毒,才執(zhí)行語句。
is & as : is一般用于對一些變量的類型做判斷.類似于OC中的isKindClass. as 與強制轉(zhuǎn)換含義雷同.
is Example:

for view : AnyObject in self.view.subviews  
{  
    if view is UIButton  
    {  
        let btn = view as UIButton;  
        println(btn)  
    }  
}  

dynamicType : 獲取對象的動態(tài)類型,即運行時的實際類型,而非代碼指定或編譯器看到的類型
__COLUMN__: 列號,
** __FILE__**:路徑,
__FUNCTION__: 函數(shù),
__LINE__ : 行號

看打印

associativity: 運算符的結(jié)合性
inout : inout作為函數(shù)聲明時,引用傳值的關(guān)鍵字星爪。但是在調(diào)用的時候引用的是地址,所以在引用的時候要加上 &,例如:

func test(inout a :Int , inout b :Int){  // 函數(shù)內(nèi)相關(guān)操作 
}
var  num1 = 3
var  num2 = 10
test(&num1,&num2)

willSet 和 didSet: willSet 和 didSet的作用是對賦值過程前后附加額外的操作
可以看做是捕獲狀態(tài)然后做操作,在將要賦值的時候和已經(jīng)賦值的時候做相 關(guān)操作
mutating : 作用:寫在func前面,以便于讓func可以修改struct和protocol的extension中的成員的值浆西。 如果func前面不加mutating,struct和protocol的extension中的成員的值便被保護起來,不能修改
class var: 在swift中對于enum和struct來說支持用static關(guān)鍵字來標(biāo)示靜態(tài)變量,
但是對于class成員來說顽腾,只能以class var的方式返回一個只讀值近零。例如:

struct SomeStructure { 
static var storedTypeProperty = "Some value." 
static var computedTypeProperty: Int { // return an Int value here 
  }
}
enum SomeEnumeration { 
static var storedTypeProperty = "Some value." 
    static var computedTypeProperty: Int {
       // return an Int value here 
    }
}
class SomeClass { 
      class var computedTypeProperty: Int { 
       }
}

這樣其實很好的區(qū)分了struct和class的功能,
不像C# 抓來一個隨便用抄肖,但相對于oc來講其實是弱化了界限久信,
如果你想在class中搞一個非只讀的靜態(tài)變量出來,可以和struct進行配合漓摩。
convenience : convenience用來進行方便的初始化裙士,就相當(dāng)于構(gòu)造函數(shù)重載。
對于class來講管毙,默認(rèn)或指定的初始化方法作為所謂的Designated初始化腿椎。
若重載的初始化需要調(diào)用Designated初始化則將它作為convenience初始化桌硫,在方法前要加上convenience關(guān)鍵字。

class Figure{  
       var name:String! 
       var nikname:String? 
       init(){   
          name = "John" 
       } 
      convenience init(name:String!,nikname:String!) {
           self.init() self.name = name self.nikname = nikname
      }
    }

precedence : 運算的優(yōu)先級啃炸,越高的話優(yōu)先進行計算鞍泉。swift 中乘法和除法的優(yōu)先級是 150 ,加法和減法的優(yōu)先級是 140 肮帐,這里我們定義點積的優(yōu)先級為 160 咖驮,就是說應(yīng)該早于普通的乘除進行運算。
unowned, unowned(safe), unowned(unsafe):無宿主引用训枢。
infix: 表示要定義的是一個中位操作符托修,即前后都是輸入
defer: 用來包裹一段代碼,這個代碼塊將會在當(dāng)前作用域結(jié)束的時候被調(diào)用恒界。這通常被用來對當(dāng)前的代碼進行一些清理工作睦刃,比如關(guān)閉打開的文件等。
可以在同一個作用域中指定多個 defer
代碼塊十酣,在當(dāng)前作用域結(jié)束時涩拙,它們會以相反的順序被調(diào)用,即先定義的后執(zhí)行耸采,后定義的先執(zhí)行兴泥。
guard : 當(dāng)某些條件不滿足的情況下,跳出作用域.

func testFunc(input:Int) {
         guard input < 10 else  {
               print("Input must < 10") 
               return
          }
          print("Input is \\(input)")}
          testFunc(1)
          testFunc(11)

與if用法一樣虾宇,但是作用與if相反.相比if來說,guard有一個好處:如果不使用return,break,continue,throw跳出當(dāng)前作用域搓彻,編譯器會報錯.所以,對那些對條件要求十分嚴(yán)格的地方嘱朽,guard是不二之選旭贬。guard也可以使用可選綁定(Optional Binding)也就是 guard let 的格式

func testMathFunc(input:Int?){
    guard let _ = input else  { 
         print("Input cannot be nil") 
         return
      }
}
 testMathFunc(nil)

PS: set、get 搪泳、new稀轨、self、super岸军、none奋刽、if 、for凛膏、return文中沒提到的就不一一介紹了杨名。沒提到的都是最基本的或者我不知道的或者不常用的關(guān)鍵字,后面接觸到新的再繼續(xù)記錄.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猖毫,隨后出現(xiàn)的幾起案子台谍,更是在濱河造成了極大的恐慌,老刑警劉巖吁断,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趁蕊,死亡現(xiàn)場離奇詭異坞生,居然都是意外死亡,警方通過查閱死者的電腦和手機掷伙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門是己,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人任柜,你說我怎么就攤上這事卒废。” “怎么了宙地?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵摔认,是天一觀的道長。 經(jīng)常有香客問我宅粥,道長参袱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任秽梅,我火速辦了婚禮抹蚀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘企垦。我一直安慰自己环壤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布竹观。 她就那樣靜靜地躺著镐捧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪臭增。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天竹习,我揣著相機與錄音誊抛,去河邊找鬼。 笑死整陌,一個胖子當(dāng)著我的面吹牛拗窃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泌辫,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼随夸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了震放?” 一聲冷哼從身側(cè)響起宾毒,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎殿遂,沒想到半個月后诈铛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乙各,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年幢竹,在試婚紗的時候發(fā)現(xiàn)自己被綠了耳峦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡焕毫,死狀恐怖蹲坷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邑飒,我是刑警寧澤循签,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站幸乒,受9級特大地震影響懦底,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罕扎,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一聚唐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腔召,春花似錦杆查、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至浊仆,卻和暖如春客峭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抡柿。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工舔琅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洲劣。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓备蚓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親囱稽。 傳聞我的和親對象是個殘疾皇子郊尝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 關(guān)鍵字作用: Public:被Public修飾的可以在其他作用域被訪問,可以在其他作用域被繼承或者override...
    順手給我new一個對象閱讀 1,227評論 0 2
  • Swift2.0 1.defer譯為延緩战惊、推遲之意類似棧 注意作用域流昏,其次是調(diào)用順序——即一個作用域結(jié)束(注意),...
    zeqinjie閱讀 3,378評論 0 50
  • 基礎(chǔ)部分(The Basics) 當(dāng)推斷浮點數(shù)的類型時,Swift 總是會選擇Double而不是Float横缔。 結(jié)合...
    gamper閱讀 1,286評論 0 7
  • 晚風(fēng)習(xí)習(xí),現(xiàn)在陽臺上享受著這入夜的清涼膛锭。夜并不黑暗粮坞,遠遠近近的燈光,點綴著夜的色彩初狰。聽著孩子們的語音莫杈,心底柔軟處輕...
    向行閱讀 361評論 0 3
  • 愛是什么 記得星爺說過一句話:曾經(jīng)有一段愛情擺在我得面前,我…… 相信有好多人都聽話奢入,看過筝闹,可誰又明白愛到底是...
    默也閱讀 222評論 0 1