С Swift 5.2

Возможно, вы помните, что операторы if let можно объединить в цепочку с запятой.

let o1:Int? = 1
let o2:Int? = 2
if let one = o1, let two = o2 {
  print(one, two)
}
// Output: 1 2

Запятая здесь действует как эквивалент логического &&. Код внутри оператора if не будет выполняться, если оба o1 и o2 не равны nil.

Также можно связать логическое выражение после оператора let. В случае ниже мы проверяем, что one не является nil, а также что 1 › 0.

let o1:Int? = 1
if let one = o1, one > 0 {
  print(one)
}
// Output: 1

Однако интересным побочным эффектом этого синтаксиса является то, что , и && могут использоваться взаимозаменяемо. Другими словами, нам не нужно начинать оператор с if let, чтобы можно было использовать запятую. Это означает, что следующий код скомпилируется и запустится, как и ожидалось:

let one = 1
let two = 2
if one > 0, two > 1 {
  print(one, two)
}
// Output: 1, 2
if one > 0 && two > 1 {
  print(one, two)
}
// Output: 1, 2

Разница в нюансах заключается в том, что one > 0 && two > 1 оценивается как одно целое выражение, тогда как one > 0, two > 1 обрабатывается как два независимых выражения. Какой путь вы выберете, зависит скорее от стилистического решения.

Я бы сказал, что для простых выражений one > 0 && two > 1 более удобочитаемо. && ясно передает смысл выражения. Однако для сложных выражений использование && требует большего внимания к скобкам и порядку операций. Я бы сказал, что это менее читабельно и более подвержено ошибкам по сравнению со стилем, основанным на запятых.

Использование &&:

if (this || that) && something() && (another == 1 || example == 6)

Использование ,:

if this || that, something(), another == 1 || example == 6

По этой причине я решил использовать запятые всякий раз, когда логические выражения выходят за пределы одного &&.

Дайте мне знать, если у вас есть какие-либо мысли, и посмотрите этот пост на forums.swift.org для более подробного обсуждения этого фрагмента синтаксиса.