Skip to content

Instantly share code, notes, and snippets.

@tikidunpon
Created May 6, 2016 00:07
Show Gist options
  • Save tikidunpon/9878b1c4a4650adc74cb5d344c0b52d2 to your computer and use it in GitHub Desktop.
Save tikidunpon/9878b1c4a4650adc74cb5d344c0b52d2 to your computer and use it in GitHub Desktop.
try! defer! #swift2 #CodePiece #swift #swiftlang
func unreachableDefer() {
print(#function + " start")
if true { return }
// It will not execute because unreachable
defer { print("defer-1") }
print(#function + " end")
}
unreachableDefer()
/*
unreachableDefer() start
*/
func deferTwice() {
print(#function + " start")
var i = 0
// Defer does not capture variable when this line reached
// The value of runtime will be used
defer { print("defer-1 i=\(i)") }
defer { print("defer-2 i=\(i)") }
i = 1
print(#function + " end")
}
deferTwice()
/*
deferTwice() start
deferTwice() end
defer-2 i=1
defer-1 i=1
*/
func deferIf() {
print(#function + " start")
do {
print("do block start")
if true {
// It will execute immediately if 'if-block' ended
defer { print("defer-if") }
} else {
defer { print("defer-else)") }
}
print("do block end")
}
print(#function + " end")
}
deferIf()
/*
deferIf() start
do block start
defer-if
do block end
deferIf() end
*/
func deferInForloop() {
print(#function + " start")
for i in 1...5 {
defer { print("defer-\(i)") }
}
print(#function + " end")
}
deferInForloop()
/*
deferInForloop() start
defer-1
defer-2
defer-3
defer-4
defer-5
deferInForloop() end
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment