gpt4 book ai didi

swiftui - 在 SwiftUI 中为 NSViewPepresentable/UIViewRepresentable 添加首选项键

转载 作者:行者123 更新时间:2023-12-05 04:57:56 25 4
gpt4 key购买 nike

我有一个自定义 AppKit/UIKit View 的实例,它被包装到一个 **ViewRepresentable 中,它需要在 SwiftUI 层次结构中传递一些诊断信息。由于此信息不是最重要的,我想使用 PreferenceKey API 来完成,以便父 View 仅在需要时订阅它。不幸的是,我想不出一种方法来在我的 View 上设置首选项键,因为我没有对 View 结构本身进行评估,因此无法使用 preference() API。有什么方法可以设置协调器的首选项键吗?

最佳答案

这是一个可能的方法的简单演示。使用 Xcode 12/iOS 14 进行测试。想法是使用注入(inject)的首选项键构造 UIViewRepresentable。

struct DemoView: View {
@State private var diag = CGFloat.zero
var body: some View {
VStack {
Text("Diagnostic >> \(diag)")
.background(MyUIRep.trackingRep)
}
.onPreferenceChange(MyPrefKey.self) { value in
self.diag = value
}
}
}

struct TestPreferenceKeyInRep_Previews: PreviewProvider {
static var previews: some View {
TestPreferenceKeyInRep()
}
}

struct MyUIRep: UIViewRepresentable {
static var trackingRep: some View {
MyUIRep().preference(key: MyPrefKey.self, value: 13.31)
}

func makeUIView(context: Context) -> UIView {
return UIView()
}

func updateUIView(_ uiView: UIView, context: Context) {
}

}

struct MyPrefKey : PreferenceKey {
static var defaultValue: CGFloat = .zero

static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value += nextValue()
}
}

关于swiftui - 在 SwiftUI 中为 NSViewPepresentable/UIViewRepresentable 添加首选项键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64186842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com