Кажется, что новая 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
?