swiftui - 是什么导致在此代码中调用 updateUIView()?
问题描述
我知道@State 变量的更改会通知@Binding 状态已更改,但是什么会导致调用 updateUIView() 方法?@Binding 和调用之间显然存在一些隐藏的联系,但它是如何工作的呢?
// Experiment_Map_View.swift
import SwiftUI
import MapKit
struct Experiment_Map_View: UIViewRepresentable {
@Binding var test: Bool
func updateUIView(_ uiView: MKMapView, context: Context) {
print("updateUIView")
print(test)
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
final class Coordinator: NSObject, MKMapViewDelegate {
var control: Experiment_Map_View
init(_ control: Experiment_Map_View) {
print("init -----------------")
self.control = control
}
}
func makeUIView(context: Context) -> MKMapView {
print("makeUIView")
let map = MKMapView()
map.delegate = context.coordinator
return map
}
}
struct MyRootView: View {
@State var test: Bool = true
var body: some View {
ZStack {
Experiment_Map_View(test: $test)
VStack {
Spacer()
Button("Next") {
print("Next")
self.test.toggle()
}
}
}
}
}
struct Experiment_Map_View_Previews: PreviewProvider {
static var previews: some View {
MyRootView()
}
}
解决方案
SwiftUI
正在管理@State
和对象的内存,并自动刷新依赖于您的变量@Binding
的任何 s 的任何 UI 。是封闭源代码,所以不幸的是我们还不知道它是如何完成的,但为了简单起见,它可以被认为是幕后修饰符。View
SwiftUI
didSet
推荐阅读
- c - 如何使用 CMake (Mac M1) 导入 Homebrew SDL2_image
- go - 检查 interface{} 是否指向结构
- c - 正确地将浮点数输入到结构中并打印其他提示(scanf 和 fgets 之间的区别)?
- filesystems - 仅当没有相同的文件/目录时才提取 tar
- python - nltk标签的问题
- amazon-web-services - 服务无法承担角色错误 - 使用 JDBC 目标创建 AWS Glue cloudformation
- nasm - 为什么除法后的输出是“@”符号?
- javascript - 带有 pdf-lib 的“无法嵌入缺少内容的页面”
- python - python中的类变量使用Pyglet
- azure-cognitive-search - 翻译技能不将字段写入输出