guard let foo = foo else { return nil }
Может ли это утверждение быть потенциально дорогим, если foo очень велико?
Вместо того, чтобы задавать себе вопрос таким образом, задайте его так: что, если бы вы сказали
if foo != nil {
let foo = foo!
// everything else here
}
Говорил foo!
, чтобы развернуть Дополнительный "дорогой"? Каким бы ни был ваш ответ, он должен быть точно таким же для guard let foo = foo
, потому что они оба делают точно одно и то же: они проверяют на nil
и, если это безопасно, они разворачивают Optional. И это все они оба делают. Один - просто синтаксический сахар для другого.