通过_makeView可以不修改body的实现达成
inspired
struct ContentView: View {
private var person = Person(name: "Tom", age: 12)
var body: some View {
VStack {
Text(person.name)
Text("\(person.age)")
HStack {
Button("+") { person.age += 1 }
Button("-") { person.age -= 1 }
}
.padding()
}
}
@ViewBuilder
private var observationView: ObservationView<Body> {
ObservationView {
body
}
}
static func _makeView(view: SwiftUI._GraphValue<Self>, inputs: SwiftUI._ViewInputs)
-> SwiftUI._ViewOutputs
{
return ObservationView<Body>._makeView(view: view[\.observationView], inputs: inputs)
}
static func _makeViewList(view: SwiftUI._GraphValue<Self>, inputs: SwiftUI._ViewListInputs)
-> SwiftUI._ViewListOutputs
{
return ObservationView<Body>._makeViewList(view: view[\.observationView], inputs: inputs)
}
static func _viewListCount(inputs: SwiftUI._ViewListCountInputs) -> Int? {
return ObservationView<Body>._viewListCount(inputs: inputs)
}
}
包装一个协议
protocol ObservationBPView: View {}
extension ObservationBPView {
@ViewBuilder
private var observationView: ObservationView<Body> {
ObservationView {
body
}
}
static func _makeView(view: SwiftUI._GraphValue<Self>, inputs: SwiftUI._ViewInputs)
-> SwiftUI._ViewOutputs
{
return ObservationView<Body>._makeView(view: view[\.observationView], inputs: inputs)
}
static func _makeViewList(view: SwiftUI._GraphValue<Self>, inputs: SwiftUI._ViewListInputs)
-> SwiftUI._ViewListOutputs
{
return ObservationView<Body>._makeViewList(view: view[\.observationView], inputs: inputs)
}
static func _viewListCount(inputs: SwiftUI._ViewListCountInputs) -> Int? {
return ObservationView<Body>._viewListCount(inputs: inputs)
}
}
struct ContentView: ObservationBPView {
...
}
包装一个Macro
@ObservationBPView
struct ContentView: View {
...
// Macro expends below
@ViewBuilder
private var observationView: ObservationView<Body> {
ObservationView {
body
}
}
static func _makeView(view: SwiftUI._GraphValue<Self>, inputs: SwiftUI._ViewInputs)
-> SwiftUI._ViewOutputs
{
return ObservationView<Body>._makeView(view: view[\.observationView], inputs: inputs)
}
static func _makeViewList(view: SwiftUI._GraphValue<Self>, inputs: SwiftUI._ViewListInputs)
-> SwiftUI._ViewListOutputs
{
return ObservationView<Body>._makeViewList(view: view[\.observationView], inputs: inputs)
}
static func _viewListCount(inputs: SwiftUI._ViewListCountInputs) -> Int? {
return ObservationView<Body>._viewListCount(inputs: inputs)
}
}
通过_makeView可以不修改body的实现达成
inspired
包装一个协议
包装一个Macro