Есть ли у Swift функция "or equals", как | / = в Ruby?
В Swift, как я могу установить необязательный foo
, но только если это nil
?
Я знаю о нулевом коалесцирующем операторе Свифта :
foo = foo ?? "Hello"
(где foo
- необязательный String
)
foo ||= "Hello"
3 ответа:
Такой оператор был рассмотрен и отклонен: https://github.com/apple/swift-evolution/blob/master/proposals/0024-optional-value-setter.md
Рациональная причина отказа должна быть в списке электронной почты swift-evolution, но ссылка, прикрепленная к вышеуказанным пунктам, указывает на SE-0025 вместо 24.
Вот ссылка на rational (отредактирована из-за комментария Кеннета Бруно): http://article.gmane.org/gmane.comp.lang.swift.evolution/7694
Нет, именно так и надо делать. Если вы хотите, вы можете завернуть его в свой собственный оператор:
infix operator ||= {} func ||=<T>(inout left: Optional<T>, right: T) { left = left ?? right } var foo:String? = nil // foo -> nil foo ||= "Hello" // foo -> "Hello" foo ||= "Hi" // foo -> "Hello"
Я бы рекомендовал использовать
??=
, чтобы соответствовать шаблонуfoo = foo ?? "Hello"
, но использовать все, что вам удобно.