新版本的变更 / Swift 2.0

// *** before: ***
func readOld(path: String) -> String? {
    let file = openFile(path)
    guard file.isValid else {
        closeFile(file)      // the cleanup was repeated at every exit,
        return nil           // and forgotten at the newest one
    }
    let text = file.read()
    closeFile(file)
    return text
}

// *** in version 2.0: ***
func read(path: String) -> String? {
    let file = openFile(path)
    defer { closeFile(file) }    // runs on any exit from the scope

    guard file.isValid else { return nil }
    return file.read()
}

// several defer blocks run in reverse order
func order() {
    defer { print("second") }
    defer { print("first") }
}