Skip to content

Instantly share code, notes, and snippets.

@es-kumagai
Created July 23, 2015 10:08
Show Gist options
  • Save es-kumagai/df58a16990fce38035af to your computer and use it in GitHub Desktop.
Save es-kumagai/df58a16990fce38035af to your computer and use it in GitHub Desktop.
guard で where を Playground で試してみたらうまく動かなくておかしいなと思っていたら、大域だと動きが違う様子でした。 #CodePiece
// この場合はエラー
// 大域で、同じ変数名で Optional Binding するとビルドが通らない(string が Optional のまま)
guard let string = string where !string.isEmpty else {
print("GUARD")
exit(0)
}
// この場合は OK
// 大域でも別の変数名で Binding すると通る(新しい変数 s なら Optional が解けている)
guard let s = string where !s.isEmpty else {
print("GUARD")
exit(0)
}
// この場合は OK
// 関数に包むと let の後の where で同じ名前の変数でも適切に扱える
func test() {
guard let string = string where !string.isEmpty else {
print("GUARD")
exit(0)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment