defer
defer
에는, 현재 코드 블록을 빠져나가기 전에 꼭 실행해야 하는 코드를 작성한다.return
하는 함수 안에 작성되었다면, return
이후에 불러와진다.defer
는 코드 블럭상 안에서 밖의 순서로 호출되며, 같은 코드 블럭에 있을 경우 아래에서 위 순서대로 호출된다.defer
를 지나지 않고 return
하는 경우, defer
는 불러와지지 않는다.switch
문 안에서는 못 쓰는 줄 알았다. 하지만 이렇게 좀 더 정의에 대해 생각해 보니, switch
문도 하나의 블럭이고, 안 될 이유는 없지 않나? 해서 적용해보았다.extension BankManager {
func openBank() {
print("1 : 은행개점\n2 : 종료")
print("입력 :", terminator: " ")
let selection = readLine()
switch selection {
case "1":
defer {
issueTickets()
}
return
case "2":
return
default:
defer {
openBank()
}
return
}
}
}
openBank()
가 return
된 다음 issueTickets()
가 불러와진다.https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#grammar_code-block
https://stackoverflow.com/questions/57610020/swift-defer-piculiarity-why-is-code-in-casedefer-is-invoked-before-the-end-of