это легко проверить. попробуйте следующий на вашей игровой площадке
import SwiftUI
import PlaygroundSupport
struct ContentView: View {
var body: some View {
VStack {
Text("Hello SwiftUI!")
}
}
}
let cv = ContentView()
print("type of ContentView.body:", type(of: cv.body))
PlaygroundPage.current.setLiveView(cv)
он печатает
type of ContentView.body: VStack<Text>
Несмотря на то, что View является протоколом, структура, принимающая его, ДОЛЖНА ИМЕТ БЕТОННЫЙ ТИП.
это можно записать как
import SwiftUI
import PlaygroundSupport
struct ContentView: View {
var body: some View {
let t = Text("Hello World!")
let content: ()-> Text = {
return t
}
let vs = VStack(alignment: .center, spacing: 0, content: content)
return vs
}
}
let cv = ContentView()
print("type of ContentView.body:", type(of: cv.body))
PlaygroundPage.current.setLiveView(cv)
с тем же результатом .-)
НЕ ПЫТАЙТЕСЬ ОПРЕДЕЛИТЬ КЛАСС, СООТВЕТСТВУЮЩИЙ ПРОСМОТРУ ПРОТОКОЛА!
этот код будет скомпилирован без ошибок, но он взломает sh ... Да, многое можно улучшить, я ожидаю, что компиляция не удастся.
import SwiftUI
import PlaygroundSupport
final class ContentView: View {
var body: some View {
let t = Text("Hello World!")
let content: ()-> Text = {
return t
}
let vs = VStack(alignment: .center, spacing: 0, content: content)
return vs
}
}
let cv = ContentView()
print("type of ContentView.body:", type(of: cv.body))
PlaygroundPage.current.setLiveView(cv)