8. [A Swift Tour]Error Handling

2016. 8. 7. 16:41Swift

protocol Error: ErrorType {

    

}


enum PrinterError: Error {

    case outOfPager

    case noToner

    case onFire

}


func send(job: Int, toPrinter printName: String) throws -> String {


    if printName == "Never Has Toner" {

    //if printName == "Bi Sheng" {

        throw PrinterError.noToner

    } else if printName == "Gutenberg" {

        throw PrinterError.onFire

    } else if printName == "Mokminsimseo" {

        throw PrinterError.outOfPager

    }

    return "Job sent"

}



do {

    let printerRespponse = try send(1040, toPrinter: "Bi Sheng")

    print(printerRespponse)

} catch {

    print(error)

}


do {

    //let printerRespponse = try send(1440, toPrinter: "Gutenberg")

    let printerRespponse = try send(1440, toPrinter: "Mokminsimseo")

    print(printerRespponse)

} catch PrinterError.onFire {

    print("I'll just put this over here, with hte rest of the fire.")

} catch let printerError as PrinterError {

    print("Printer error: \(printerError).")

} catch {

    print(error)

}


let printerSuccess = try? send(1884, toPrinter: "Mergenthaler")

let printerFailure = try? send(1885, toPrinter: "Never Has Toner") // throw 했는데 catch 없어서 nil



var fridgeIsOpen: Bool = false

let fridgeContent = ["milk", "eggs", "leftovers"]


// defer

func fridgeContains(food: String) -> Bool {

    fridgeIsOpen = true

    

    defer {

        fridgeIsOpen = false

    }

    

    let result = fridgeContent.contains(food)

    

    return result

}


fridgeContains("milk")

print(fridgeIsOpen)


출처 : The Swift Programming Language(iBook)