小编P. *_*Ent的帖子

SwiftUI - ObservableObject 创建了多次

我在视图中创建了一个 ObservableObject。

@ObservedObject var selectionModel = FilterSelectionModel()
Run Code Online (Sandbox Code Playgroud)

我在FilterSelectionModel'sinit函数中放置了一个断点,并多次调用它。因为这个 View 是 a 的一部分NavigationLink,所以我知道它是在那时创建的,并且与它一起创建, selectionModel 。当我导航到视图时,将再次创建 selectionModel。

在同一个视图中,我有一个“子视图”,我将 selectionModel 作为一个传递给子视图,EnvironmentObject以便子视图可以更改它。

AddFilterScreen().environmentObject(self.selectionModel)
Run Code Online (Sandbox Code Playgroud)

当子视图被关闭时,selectionModel 将再次创建并且对它所做的更改也消失了。

有趣的提示:在最顶层是一个NavigationView. 如果我添加

.navigationViewStyle(StackNavigationViewStyle())
Run Code Online (Sandbox Code Playgroud)

对此NavigationView,我的 selectionModel 的变化消失了。但是,如果我添加navigationStyle,则子视图中的 selectionModel 更改仍然存在!!(但我不想要拆分导航视图,我想要堆叠的导航视图)

在这两种情况下 - 有或没有navigationStyle, selectionModel 都会被创建多次。我无法理解这些应该如何可靠地工作。

navigationview swiftui observableobject

14
推荐指数
2
解决办法
2495
查看次数

将 ViewModifier 应用于 UIViewRepresentable

我为 UITextField 创建了一个 UIViewRespresentable。我想应用修饰符:

myTextField.font(.headline).keyboardType(keyboardType)
Run Code Online (Sandbox Code Playgroud)

这不起作用,即使我的 UIViewRepresentable 很简单:

class MyTextField: UITextField { ... }

struct MyFieldField: UIViewRepresentable {
    private let field = MyTextField()
    func makeUIView(context: Context) -> MyTextField { return field }
    func updateUIView(_ uiView: MyTextField, context: Context) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

swiftui uiviewrepresentable

4
推荐指数
1
解决办法
1228
查看次数