Есть ли у 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", но использовать все, что вам удобно.