相关疑难解决方法(0)

期望 SwiftUI DynamicProperty 属性包装器的内部更新触发视图更新是否正确?

我正在尝试创建 SwiftUI 支持的自定义属性包装器,这意味着对相应属性值的更改会导致 SwiftUI 视图的更新。这是我所拥有的简化版本:

@propertyWrapper
public struct Foo: DynamicProperty {
    @ObservedObject var observed: SomeObservedObject

    public var wrappedValue: [SomeValue] {
        return observed.value
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到即使 myObservedObject包含在我的自定义属性包装器中,SwiftUI 仍然会捕获更改,SomeObservedObject只要:

  • 我的属性包装器是一个结构
  • 我的财产包装符合 DynamicProperty

不幸的是,文档很少,我很难判断这是否仅适用于当前的 SwiftUI 实现。

DynamicProperty(在 Xcode 中,而不是在线)的文档似乎表明这样的属性是从外部更改导致视图重绘的属性,但是无法保证当您使自己的类型符合此协议时会发生什么。

我可以期待这在未来的 SwiftUI 版本中继续工作吗?

swift swiftui property-wrapper

16
推荐指数
1
解决办法
1569
查看次数

SwiftUI 视图属性 willSet 和 didSet 属性观察器不起作用

我有一个带有附加 ViewModel 的 SwiftUI(Beta 5)视图。我想通过 navigationLink 导航到它并传入一个简单的参数(在这种情况下称为 FSAC)

我导航使用

NavigationLink("Next", destination: MyTestView(FSAC: "testFsac"))
Run Code Online (Sandbox Code Playgroud)

该视图有一个带有 willSet 和 didSet 属性观察者的 FSAC 属性

struct MyTestView: View {
    @ObservedObject var vm = MyTestViewModel()

var FSAC: String {
    willSet {
        print("will set fsac")
    }
    didSet {
        print("did set fsac")
        vm.FSAC = FSAC
    }
}

var body: some View {
    VStack {
        Text("FSAC: \(FSAC)")
        Text("VM FSAC: \(vm.FSAC)")
    }
}

}
Run Code Online (Sandbox Code Playgroud)

永远不会调用打印语句。第一个文本框正确显示参数;第二个是空白。

我怎样才能让财产观察员开火?

更一般地说,是否有一种“正确”的方法来使用导航链接将参数传递给具有 ViewModel 的视图?

mvvm viewmodel swift didset swiftui

10
推荐指数
1
解决办法
8615
查看次数

标签 统计

swift ×2

swiftui ×2

didset ×1

mvvm ×1

property-wrapper ×1

viewmodel ×1