Комментарии 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
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разбор задачи A отборочного этапа Yandex Cup 2023 — iOS