如何解决为什么这段代码会重新渲染 SwiftUI 视图的主体?
我担心视图的渲染条件。
我编写了以下代码,它是属性包装器,用于实现 AppStorage
之类的钥匙串存储。
@propertyWrapper
struct SecureStorage {
var store: KeychainStore = KeychainStore()
var key: String
init(_ key: String) {
self.key = key
}
var wrappedValue: String? {
get {
store.get(key)
}
nonmutating set {
store.set(key: key,value: newValue)
}
}
var projectedValue: Binding<String?> {
Binding(get: {
wrappedValue
}) { value in
wrappedValue = value
}
}
我使用此代码在任何视图中获取钥匙串值。
struct SampleScrollView: View {
@SecureStorage("userId") var kuserId: String?
@SecureStorage("password") var kpassword: String?
var body: some View {
VStack {
DebugTextView(title: "Password",value: $kpassword)
TestView()
}
}
}
struct TestView: View {
init() {
print("TestView init")
}
var body: some View {
VStack {
Text("testview")
}
}
}
DebugTextView
是一个自定义的 TextView
,用于在 textField
中使用可选字符串,但这里省略了这段代码,因为它有点长。
这是我关注的重点:
每次更改 TestView
中的值时都会重新渲染 DebugTextView
。
每次更改 DebugTextView
中的值时都会打印“TestView init”。
我在实际的 iPhone 设备上确认了这一点。
在我看来,除了像@State
、@ObservedObject
这样的特殊值外,它不会再生身体。
为什么这段代码会重新渲染视图的主体?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。