defer

나이든별 / Oldstar·2022년 7월 12일
0

Think about Keywords

목록 보기
34/37

공부한 것

  • 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
        }
    }
}
  • 이 경우, 사용자가 1을 선택하면 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

profile
함께 나아가고자 하는 사람

0개의 댓글