Как стать автором
Обновить

Комментарии 3

НЛО прилетело и опубликовало эту надпись здесь
Код из условия
infix operator !!

extension Optional {
    public static func !!(
        v: Self,
        e: @escaping @autoclosure () -> Error
    ) throws -> Wrapped {
        guard let unwrapped = v else { throw e() }
        return unwrapped
    }
}

Примеры использования
import Foundation

infix operator !!

public enum MyErrors: Error {
    case firstError
    case secondError(information: String)
}

extension Optional {
    public static func !!(
        v: Self,
        e: @escaping @autoclosure () -> Error
    ) throws -> Wrapped {
        print(0) // 0
        print(v)
        guard let unwrapped = v else { throw e() }
        return unwrapped
    }
}

let closure: () -> MyErrors = {
    print(1) // 1
//    return MyErrors.secondError(information: "Some Information about Exception №1")
    return MyErrors.secondError(information: "Some Information about Exception №2")
}

var param: Optional<String> = nil
//var param: Optional<String> = "Some String"

do {
    print(2) // 2
    print(try param !! closure())
} catch MyErrors.firstError {
    print(3) // 3
    print(MyErrors.firstError.localizedDescription)
} catch MyErrors.secondError(let info) where { info == "Some Information about Exception №1" }() {
    print(4) // 4
    print(info)
} catch MyErrors.secondError(let info) where { info == "Some Information about Exception №2" }() {
    print(5) // 5
    print(info)
}

В консоль выведется:

2
0
nil
1
5
Some Information about Exception №2

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории