2015-07-05 32 views
6

我有一個邏輯條件:手柄只能在其他條件迅速「如果讓」使用「其中」

if let login = login where validateLogin(login) { 
    // I'm not interesting with this condition 
} else { 
    // This is interesting 
} 

是否有任何選擇,如果讓條件無法處理的真實情況(因爲我不想莫名其妙地寫做任何事情)?所以,類似於否定:

!(if let login = login where validateLogin(login)) { 
    // This is interesting 
} 

感謝您的幫助。

+0

除非我在這裏失去了一些東西,你應該嘗試: '如果讓登錄=登錄其中validateLogin(!登錄)'。在'='之前注意'!'。讓我知道如果這樣做。 – Ares

+0

它讓一個錯誤,如果讓登錄!=登錄。 – edzio27

+0

不,如果讓aValue = anOptional是模式匹配語句,而不是比較。如果anOptional包含一個值,則它將該值綁定到名稱並進入該塊。 –

回答

5

中的第一個分支你如果條件實際由2個標準:

  • if let是檢查非空
  • where是一個後續條件的語法糖,當你可以確保該變量不爲空。

可以扭轉這樣的邏輯:

if login == nil || !validateLogin(login!) { 
    // do something 
} 
7

在雨燕1.2這樣的事情是不可能的,但你可以使用:

// since where is logically the same as && 
if !(login != nil && validateLogin(login!)) { 
    // This is interesting 
} 

// or 
if login == nil || !validateLogin(login!) { 
    // This is interesting 
} 

這在邏輯上是與您的期望實現。注意:因爲&&||運算符都將表達式的右側封裝在閉包中,所以解包的力甚至是「安全」的。

期待斯威夫特2,我們得到一個新的guard聲明,處理其他部分第一:

guard let login = login where validateLogin(login) else { 
    // This is interesting 
} 

// use the unwrapped login here if you want 
+3

另外要注意的是:在guard語句中,你必須在else體內有一個'return','break','continue'或'@ noreturn'函數 – Kametrixom