рд╡рд░реНрддрдорд╛рди рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб guard
рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп if
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм if
guard
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд░реНрдл рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╡реИрдХрд▓реНрдкрд┐рдХреЛрдВ рдХреЛ рдЦреЛрд▓рдирд╛ рдирд╣реАрдВ рд╣реИ:
if !success { return false }
guard success else { return false }
рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://www.natashatherobot.com/swift-when-to-use-guard-vs-if/
рдореИрдВ рд▓рдЧрднрдЧ рдпрд╣реА рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдлреЗрд▓рд┐рдВрдЧ рдЧрд╛рд░реНрдбреНрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ:
Guard statements are required to exit in some way.
...рдпрд╛ рдирддрд╛рд╢рд╛ рдХреЗ рдмреНрд▓реЙрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░:
think of guard as a lightweight Assert
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
guard success else { return false }
рдпрд╣рд╛рдВ guard
рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг:
// This compiles fine and a bug risks going unnoticed
if !success {
// Some code here
// Forgot the return statement
}
// Compiler error, you are required to return and the bug is prevented
guard success else {
// Some code here
// Forgot the return statement
}
@RobertGummesson рддреЛ рдЖрдкрдХреЗ рдЕрдВрдЧреВрдареЗ рдХрд╛ рдирд┐рдпрдо рдпрд╣ рд╣реЛрдЧрд╛ - рднрд▓реЗ рд╣реА рдЖрдкрдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ - рдпрджрд┐ рдЖрдк рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрдк guard
рд╕реЗ рдЕрдзрд┐рдХ if
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕рд╣реА?
@agirault - рд╣рд╛рдБ, рдпрд╛ рддреЛ рд╡рд╣ рдпрд╛ рдЖрдкрдХреЛ рдмрд╕ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЪрд╛рд╣реЗ рд╡рд╣ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рдпрд╛ рдирд╣реАрдВ)ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВ рд▓рдЧрднрдЧ рдпрд╣реА рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдлреЗрд▓рд┐рдВрдЧ рдЧрд╛рд░реНрдбреНрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ:
Guard statements are required to exit in some way.
...рдпрд╛ рдирддрд╛рд╢рд╛ рдХреЗ рдмреНрд▓реЙрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░:
think of guard as a lightweight Assert
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
рдпрд╣рд╛рдВ
guard
рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг: