Что выведет код Middle Ошибки обновлено

Что выведет Swift: try? и опциональный результат

Вопрос

Что выведет код?

enum ParseError: Error { case bad }

func parse(_ s: String) throws -> Int? {
    if s == "x" { throw ParseError.bad }
    return Int(s)
}

let a = try? parse("12")
let b = try? parse("zz")
let c = try? parse("x")
print(a as Any, b as Any, c as Any)

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: Optional(12) nil nil. С Swift 5 try? не добавляет второй уровень опционала, если выражение уже опционально (SE-0230).

Что выведет

Optional(12) nil nil

Разбор

С Swift 5 try? не добавляет второй уровень опционала, если выражение уже опционально (SE-0230). Все три значения типа Int?. Поэтому «не разобралось» и «бросило ошибку» неразличимы: оба nil.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.