首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI变量: willSet,didSet

SwiftUI变量: willSet,didSet
EN

Stack Overflow用户
提问于 2020-08-16 18:50:09
回答 1查看 557关注 0票数 0

我在一个SwiftUI应用程序中有这样的代码:

代码语言:javascript
复制
@Published var myFlag = false {
    willSet {
        ... useful code ...
        objectWillChange.send()
    }
}

它或多或少是有效的,但为了准确地得到我需要的东西,我想要这样的东西:

代码语言:javascript
复制
@Published var myFlag = false {
    didSet {
        ... useful code ...
        objectDidChange.send()
    }
}

原因很简单,我希望在myFlag更新后通知我,而不是在更新之前。然而,它似乎不是这样工作的。有没有别的方法可以得到我想要的东西?

此外,我还使用了以下代码:

代码语言:javascript
复制
.onReceive(self.appState.$myFlag) {...}

ContentView.swift内幕

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-16 21:22:51

当该属性为willSet https://developer.apple.com/documentation/combine/published时,@Published会自动发布

如果您更喜欢在didSet过程中发布,请删除@Published并手动发布。

代码语言:javascript
复制
import SwiftUI
class ManualOObject: ObservableObject {
    var someValue: Int = 0{
        willSet{
            print("willSet - \(someValue)")
        }
        didSet{
            print("didSet - \(someValue)")
            objectWillChange.send()
        }
    }
    init() {
        for n in 0...5 {
            
            DispatchQueue.main.asyncAfter(deadline: .now() + Double(n)) {
                print("n = \(n.description)")
                            self.someValue = n
                        }
        }
    }
}
struct ManualOOView: View {
    @ObservedObject var manualOObject = ManualOObject()
    
    var body: some View {
        Text(manualOObject.someValue.description).onReceive(manualOObject.objectWillChange, perform: { _ in
            print("UI received = \(manualOObject.someValue)")
        })
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63435954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档