Я столкнулся со странной проблемой разрушения кортежей в Swift 5.2. Я думал, что деструктурирование кортежей не работает внутри параметра замыкания с некоторого времени go. И действительно, следующее не работает:
let expected: ((Int, Int)) -> Void = { a, b in // does not compile
print(a, b)
}
Однако я заметил, что все нижеприведенное работает:
func weird(closure: @escaping ((Int, Int)) -> Void) {
closure((1, 3))
}
// I can understand this
weird { print($0.0 + $0.1) }
weird { a, b in print(a + b) }
// Surprise!
weird { print($0 + $1) }
weird { p in print(p.0 + p.1) }
Работали ли два последних примера до Swift 5.2? Задокументировано ли это поведение где-нибудь?