OctoberHammer
6/27/2017 - 5:57 PM

try catch

try catch

//: Playground - noun: a place where people can play

import UIKit
import Foundation
enum MyErrors: Error {
    case DivisionByZero
}

//MARK: Описываем функцию, которая будент выкидывать исключение, при попытке деления на ноль.
func divide(_ what: Float, by divider: Float) throws -> Float? {
    if divider == 0.0 {
        throw MyErrors.DivisionByZero
    }
    return what/divider
}

//
var result:Float = -100000.0
//вызываем нашу функцию через блок ду-кэтч
do {
    if let buffer = try divide(5.0, by: 0.0)
    {
        result = buffer
    }
}catch {
    //в случае деления на 0, будет сообщено об ошибке
    print(error)
    //просто поставим какое-то значение-индикатор
    result = 500000.0
}
print(result)

//теперь через трай?
let anotherResult = try? divide(50.0, by: 0.0)

//в случае деления на 0 получаем nil
print("Second result: \(anotherResult)")

//При делении на 0 весь код ниже не выполнится вообще
if let thirdResult = try divide(10.0, by: 0.0) {
    print("Third result: \(thirdResult)")
} else {
    print("Something went wrong")
}

print("Just trying")