Также обратите внимание, что:
struct A {
let b: Int? = nil
func doSomething() { print("Doing Something") }
func doSomethingElse() { print("Doing Something Else") }
}
let a = A()
if (a && a.b) {
a.doSomething()
} else {
a.doSomethingElse()
}
не скомпилируется. Компилятор говорит вам:
Невозможно преобразовать значение типа «А» в ожидаемое значение «Bool»
В Swift, в отличие, например, от C, условные выражения требуют логических аргументов. ни
«a» или «a.b» - логическое значение.
Если вы измените пример на:
if (a != nil && a.b != nil) {
a.doSomething()
} else {
a.doSomethingElse()
}
компилируется с предупреждением:
Сравнение необязательного значения типа 'A' с 'nil' всегда возвращает true
Я не сделал «а» необязательным, просто чтобы все было разумно. Если вы сделаете «a» необязательным, вы получите множество ошибок компиляции, сообщающих, что его необходимо развернуть.
Также: прочитайте раздел «охрана».
IMO, дополнительные функции являются полезной и легко используемой функцией Swift.
Детская площадка и руководство ваши друзья.