2017-01-30 54 views
0

我有以下幾點:爲什麼不執行警戒?

guard let _ = myfunction() else { 
    print("guard just executed") 
    return false 
} 

myfunction返回false,而不是執行保護中的代碼。這不是防守應該執行的正確場景嗎?

的函數被定義爲:

func myfunction() -> Bool? 

但僅返回真或假(未自選)。

回答

2

guard let用來包裹可選的值,使你的情況guard let _ = myfunction() else {總是返回true,如果你還需要檢查(比較),它的價值,你需要添加一個條件與guard聲明,這樣的方式分開。

guard let flag = myfunction(), flag else { 
    print("guard just executed") 
    return false 
} 
+0

如果我回到非可選布爾值,是不是真的需要後衛? – 4thSpace

+1

@ 4thSpace是的,完全隊友:) –

+1

@LeoDabus感謝「警衛案讓」的建議。 –

2

let _ = myfunction()計算爲true如果myfunction()結果不是零不管它返回Int?String?Bool?等。如果結果不是零,沒關係展開的Bool?值是否truefalse以同樣的方式,將無關緊要如果Int?的展開值爲5,37或2089

guard let _ = myfunction() else {}落入的保護條件僅當結果3210是零。

1

guard let需要一個可選的參數,如果你只需要檢查一個布爾結果還有一個更簡單的語法

guard myfunction() else { ...