guard
語句和if
語句有點類似,都是根據其關鍵字之後的表示式的布林值決定下一步執行什麼。但與if
語句不同的是,guard
語句只會有乙個**塊,不像if
語句可以if else
多個**塊。
那麼guard
語句的作用到底是什麼呢?顧名思義,就是守護。guard
語句判斷其後的表示式布林值為false
時,才會執行之後**塊裡的**,如果為true
,則跳過整個guard
語句,我們舉例來看看。
我們以今年高考為例,在進入考場時一般都會檢查身份證和准考證,我們寫這樣乙個方法:
func checkup(person: [string: string!])// 檢查准考證,如果准考證沒帶,則不能進入考場
guard let examnumber = person["examnumber"] else
// 身份證和准考證齊全,方可進入考場
print("您的身份證號為:\(id),准考證號為:\(examnumber)。請進入考場!")
}checkup(["id": "123456"]) // 沒有准考證,不能進入考場!
checkup(["examnumber": "654321"]) // 沒有身份證,不能進入考場!
checkup(["id": "123456", "examnumber": "654321"]) // 您的身份證號為:123456,准考證號為:654321。請進入考場!
上述**中的第乙個guard
語句用於檢查身份證,如果檢查到身份證沒帶,也就是表示式為false
時,執行大括號裡的**,並返回。第二個guard
語句則檢查准考證。
如果兩證齊全,則執行最後乙個列印語句,上面的兩個guard
語句大括號內的**都不會執行,因為他們表示式的布林值都是true
。
這裡值得注意的是,id
和examnumber
可以在guard
語句之外使用,也就是說當guard
對其表示式進行驗證後,id
和examnumber
可在整個方法的作用域中使用,並且是解包後的。
我們再用if else
語句寫乙個類似的方法:
func checkupuseif(person: [string: string!]) elseprint("您的身份證號為:\(id),准考證號為:\(examnumber)") // 報異常
}checkupuseif(["id": "123456"]) // 證件不齊全,不能進入考場!
checkupuseif(["examnumber": "654321"]) // 證件不齊全,不能進入考場!
checkupuseif(["id": "123456", "examnumber": "654321"]) // 您的身份證號為:123456,准考證號為:654321。請進入考場!
我們可以看到用if else
實現的方法顯然不如guard
實現的那麼精準。而且id
和examnumber
的作用域只限在if
的第乙個大括號內,超出這個作用域編譯就會報錯。
new關鍵字 this關鍵字 base關鍵字
使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...
this關鍵字 static關鍵字
1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...
base關鍵字 this關鍵字
用於在派生類中實現對基類公有或者受保護成員的訪問,但是只侷限在建構函式 例項方法和例項屬性訪問器中。功能主要包括 1 呼叫基類上已被其他方法重寫的方法。2 指定建立派生類例項時應呼叫的基類建構函式。base常用於,在派生類物件初始化時和基類進行通訊。base可以訪問基類的公有成員和受保護成員,私有成...