回答
真正的大的區別是,當你正在做的一個可選的綁定:
if let x = xOptional {
if let y = yOptional {
// ... and now x and y are in scope, _nested_
}
}
進行對比:
guard let x = xOptional else {return}
guard let y = yOptional else {return}
// ... and now x and y are in scope _at top level_
出於這個原因,我經常有多重繼承之前guard
報表,我得到到例行公事。
請參閱我的書進一步討論:http://www.apeth.com/swiftBook/ch05。 html#SECguard – matt
下面是一個實用的代碼示例:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/80551757899141e786b7f601f3879a7b450923c2/bk2ch02p070filters2/ch15p419filters/MyVignetteFilter.swift – matt
另一個(我的代碼充滿了這種類型):https://github.com/mattneub/Programming-iOS-Book-Examples/blob/80551757899141e786b7f601f3879a7b450923c2/bk2ch14p653backgroundPlayerAndInterrupter/interrupter/interrupter/AppDelegate.swift – matt
之間的差異,guard
執行語句基於表達式的Boolean
值。與if
語句不同,guard
語句僅在條件未滿足時才運行。你可以想像看起來更像是一個Assert
,但不是崩潰,你可以優雅地退出。
參考和代碼示例here。
爲了增加Matt's answer,您可以在單個保護聲明幾個條件:
guard let x = xOptional, y = yOptional else { return }
// ... and now x and y are in scope _at top level_
除了可選的綁定,監護條件可以測試布爾結果:
guard x > 0 else { return }
總之,守護語句的好處是在範圍的開始處使早期退出顯而易見,而不是將條件隱藏在嵌套else語句中。
- 1. 斯威夫特2斯威夫特3
- 2. 斯威夫特轉換斯威夫特
- 3. 斯威夫特2
- 4. 斯威夫特2
- 5. 斯威夫特2
- 6. 轉換爲斯威夫特2
- 7. 轉換爲斯威夫特2〜3
- 8. 斯威夫特 - JSQMessagesViewController與斯威夫特
- 9. 在斯威夫特2
- 10. NSDateFormatter斯威夫特2
- 11. 自斯威夫特2
- 12. 如何斯威夫特2
- 13. 與斯威夫特2
- 14. UIBezierPath - 斯威夫特2
- 15. CLGeocoder斯威夫特2版
- 16. 斯威夫特2 arch4random
- 17. .MAP生產[T]斯威夫特3從斯威夫特轉換2
- 18. 斯威夫特3運行
- 19. 斯威夫特:轉換SKSpriteNode
- 20. 斯威夫特
- 21. 斯威夫特
- 22. 斯威夫特
- 23. 斯威夫特
- 24. 斯威夫特
- 25. 斯威夫特
- 26. 斯威夫特
- 27. 斯威夫特
- 28. 斯威夫特
- 29. 斯威夫特
- 30. 斯威夫特
[Swift 2 guard關鍵字]的可能重複(http://stackoverflow.com/q/30791488/4151918) –