Created
May 6, 2016 00:07
-
-
Save tikidunpon/9878b1c4a4650adc74cb5d344c0b52d2 to your computer and use it in GitHub Desktop.
try! defer! #swift2 #CodePiece #swift #swiftlang
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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