Ищете ссылку на документ или имя или ссылку на это поведение, подобное факультативной привязке, но не обсуждаются в этой части документов.Быстрые опционы и оператор равенства
я могу проверить опциональный с оператором ==
и испытание как против nil
и его реальной стоимости, не делая какие-либо конкретные развёртки:
var toggle: Bool? = nil
if (toggle == true || toggle == nil) {
// do something
}
Это компилирует и работает, как вы хотите, но что произошло здесь, так что мне не пришлось явно разворачивать toggle!
; ==
благополучно сделал это для меня.
Это удобно, но я признаюсь, что немного удивлен, когда заметил это. Является ли это просто поведением реализации по умолчанию ==
? Или что-то еще на этом языке происходит здесь? Спасибо за понимание.
Если вы нажмете команду на '==', вы увидите, что существует 'public func == (lhs: T ?, rhs: T?) -> Bool', который принимает два дополнительных варианта: операнды. –
Действительно, но зачем это нужно? Является ли это философским в языковом дизайне? Или просто удобство? Или я слишком много думаю об этом? –
Удобство, думаю. Операторы сравнения, берущие опции, которые удалены в Swift 3: https://github.com/apple/swift-evolution/blob/master/proposals/0121-remove-optional-comparison-operators.md. Но операторы равенства остались: * «Варианты == и! =, Которые принимают необязательные операнды, по-прежнему полезны, и их результаты неудивительны, поэтому они останутся». * –