【问题标题】:Does SwiftUI removeDuplicates from a subscriber to an @Published property?SwiftUI 是否从订阅者中删除了 @Published 属性的重复项?
【发布时间】:2021-12-19 09:17:31
【问题描述】:

如果我有一个ObservableObject 喜欢...

class Foo: ObservableObject {
  @Published var value: Int = 1

  func update() {
    value = 1
  }
}

然后是这样的视图......

struct BarView: View {
  @ObservedObject var foo: Foo

  var body: some View {
    Text("\(foo.value)")
      .onAppear { foo.update() }
  }
}

这是否会导致视图不断刷新?还是 SwiftUI 在它创建的订阅者中做了类似于 removeDuplicates 的事情?

我想是后者,但我一直在努力寻找这方面的任何文档。

【问题讨论】:

    标签: swiftui combine


    【解决方案1】:

    onAppear 在视图首次出现在屏幕上时被调用。由于已发布的属性已更新,因此在刷新视图时不会再次调用它,因此您在此处的代码只会碰撞该值一次,然后更新视图。

    如果您在视图主体中添加了更新对象的内容,那可能会触发某种异常,我现在想尝试一下。

    好的,这个:

    class Huh: ObservableObject {
        @Published var value = 1
        func update() {
            value += 1
        }
    }
    
    struct TestView: View {
        @StateObject var huh = Huh()
        
        var body: some View {
            huh.update()
            return VStack {
                Text("\(huh.value)")
            }.onAppear(perform: {
                huh.update()
            })
        }
    }
    

    只是将 SwiftUI 置于无限循环中。如果我不只是买了一台新的 Mac,它现在已经崩溃了 :D

    【讨论】:

      猜你喜欢
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多