DevPrep

Все темы › Объектно-ориентированное программирование (ООП)

Обработка ошибок и исключения в ООП

Junior

Суть

В классических ООП-языках (Java, C#, C++) ошибки — это исключения: объект выбрасывается, стек раскручивается до ближайшего catch, любой вызов может неявно прервать выполнение. В Swift подход другой: ошибка — это значение, а не исключение.

Как устроено в Swift

import Foundation

enum PaymentError: Error {
    case insufficientFunds(missing: Decimal)
    case cardExpired
}

// Typed throws (Swift 6): the error type is part of the signature.
func charge(_ amount: Decimal, balance: Decimal) throws(PaymentError) {
    guard balance >= amount else {
        throw .insufficientFunds(missing: amount - balance)
    }
}

do {
    try charge(100, balance: 30)
} catch .insufficientFunds(let missing) {
    print("need \(missing) more")          // need 70 more
} catch {
    print("other: \(error)")
}

// Error as a value: Result keeps success/failure for later.
let result = Result { try charge(10, balance: 50) }
if case .failure(let e) = result { print(e) }

let maybe: Void? = try? charge(1, balance: 0)  // nil on failure
print(maybe == nil)                             // true

На что смотрит интервьюер

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store