Кажется, что новая SwiftUI Apple SwiftUI использует новый тип синтаксиса, который эффективно создает кортеж, но имеет другой синтаксис:
var body: some View {
VStack(alignment: .leading) {
Text("Hello, World") // No comma, no separator ?!
Text("Hello World!")
}
}
Пытаясь разобраться, что на самом деле представляет собой этот синтаксис, я обнаружил, что используемый здесь инициализатор VStack принимает закрытие типа () → Content в качестве второго параметра, где Content - это универсальный параметр, соответствующий View который выводится через замыкание, Чтобы выяснить, к какому типу относится Content, я немного изменил код, сохранив его функциональность:
var body: some View {
let test = VStack(alignment: .leading) {
Text("Hello, World")
Text("Hello World!")
}
return test
}
При этом test показывает, что он имеет тип VStack<TupleView<(Text, Text)>>, что означает, что Content имеет тип TupleView<Text, Text>. Просматривая TupleView, я обнаружил, что это тип оболочки, происходящий из самого SwiftUI, который можно инициализировать только путем передачи кортежа, который он должен обернуть.
Вопрос
Теперь мне интересно, как в мире два экземпляра Text в этом примере конвертируются в TupleView<(Text, Text)>. Это взломано в SwiftUI и, следовательно, неверный обычный синтаксис Swift? TupleView являющийся типом SwiftUI поддерживает это предположение. Или это правильный синтаксис Swift? Если да, то как можно использовать его вне SwiftUI?
