Как стать автором
Обновить
1
0
Sergey A @SergeyAbA

Middle iOS-Developer

Отправить сообщение

Сам разбор я мог уместить хоть в одном приложение, но решил уделить внимание деталям и разобрать их поподробнее. Все же спасибо за комментарий к моей работе, при написании новых статей, возможно, учту Ваше пожелание.

У каждого свое мнение, лично мне задача понравилась, она с подковыркой, поэтому и ответы такие, иначе тут не сформулируешь.

Код из условия
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

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность

Специализация

Разработчик мобильных приложений
Средний
От 200 000 ₽
Разработка под iOS
Разработка мобильных приложений
Клиент-серверные приложения
Xcode
Swift
Objective-С
UIKit
Foundation
Autolayout
iOS Human Interface Guidelines