Swift guard關鍵字 守護

2022-08-19 04:48:14 字數 1781 閱讀 9521

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

這裡值得注意的是,idexamnumber可以在guard語句之外使用,也就是說當guard對其表示式進行驗證後,idexamnumber可在整個方法的作用域中使用,並且是解包後的。

我們再用if else語句寫乙個類似的方法:

func checkupuseif(person: [string: string!])  else 

print("您的身份證號為:\(id),准考證號為:\(examnumber)") // 報異常

}checkupuseif(["id": "123456"]) // 證件不齊全,不能進入考場!

checkupuseif(["examnumber": "654321"]) // 證件不齊全,不能進入考場!

checkupuseif(["id": "123456", "examnumber": "654321"]) // 您的身份證號為:123456,准考證號為:654321。請進入考場!

我們可以看到用if else實現的方法顯然不如guard實現的那麼精準。而且idexamnumber的作用域只限在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可以訪問基類的公有成員和受保護成員,私有成...