2017-03-02 68 views
0

我一直在尋找如何在Swift中使用guard關鍵字。最近一位開發人員告訴我,如果在關閉中沒有錯誤,下面的代碼將打印「成功」正確使用Swift Guard關鍵字?

for attachment in attachments! { 
    attachment.fetchData { (data, error) in 
     guard let error = error else { 
      print(「success」) 
      return 
     } 

     print(error.localizedDescription) 
} 

我對他的發言有些困惑。在閱讀Apple的關閉和保護關鍵字文檔後,它看起來像我的代碼將只打印「成功」,只有當有一個錯誤

我覺得他正在反向使用它,但我可能是錯的。 有人可以爲我分解,並解釋是否有或沒有錯誤打印成功

謝謝。

+0

時沒有錯誤成功打印。當守衛條件爲假時(或者在「守衛讓」的情況下變量爲零),守衛語句被輸入。 – dan

+0

@dan - 啊,我明白了,所以如果錯誤不等於錯誤,或者沒有錯誤(錯誤爲零),那麼它讀取成功。謝謝。我認爲如果陳述是真實的,就像if語句一樣,將進入警戒條件。你想提交一個答案讓我接受嗎? – BlueishVelvet

+0

你真的不應該使用'guard'來封裝快樂執行路徑的邏輯 - 只能用於失敗邏輯。在這種情況下,您可以使用'if let'來代替,並執行錯誤打印並返回。或者在'data'而不是'error'上使用'guard let'。 – Hamish

回答

0

使用警衛來解開錯誤是非常具有誤導性的。您應該使用它來打開數據,並確保沒有錯誤,並在發生錯誤時提前退出您的方法。

只要改變你的後衛聲明:

guard let data = data, error == nil else { 
    print(error ?? "") 
    return 
} 
+0

謝謝@LeoDabus。 – BlueishVelvet

+0

不客氣 –