defer {
}

defer后面打括号中的内容,是函数中最好执行的代码,即在return或throw之后执行的代码,举例:

return

        var fridgeIsOpen = false
        let fridgeContent = ["milk", "eggs", "leftovers"]

        func fridgeContains(_ food: String) -> Bool {
            fridgeIsOpen = true
            defer {
                print("defer")
                fridgeIsOpen = false
            }

            let result = fridgeContent.contains(food)
            print("返回")
            fridgeIsOpen = true
            return fridgeIsOpen
        }
        print(fridgeContains("banana"))
        print(fridgeIsOpen)

打印结果:
返回
defer
true
false

throw

    func send(job: Int, toPrinter printerName: String) throws -> String {
        defer {
            print("defer")
        }
        if printerName == "Never Has Toner" {
            print("抛出异常")
            throw PrinterError.noToner
        }
        print("返回")
        return "Job sent"
    }

        do {
            let printerResponse = try send(job: 1040, toPrinter: "Never Has Toner")
            //抛出错误后在do中后面的代码不会执行
            print("printerResponse")
            print(printerResponse)
        } catch {
            print("error")
            print(error)
        }

打印结果:
抛出异常
defer
error
noToner

更多推荐