1.什么是 @Published 属性包装器?

@Published是SwiftUI最有用的包装之一,允许我们创建出能够被自动观察的对象属性,SwiftUI会自动监视这个属性,一旦发生了改变,会自动修改与该属性绑定的界面。

class CalculatorModel: ObservableObject {
    @Published var brain: CalculatorBrain = .left("0")
}

如果不使用@Published

// mode必须是引用类型class,并且继承ObservableObject
class CalculatorModel: ObservableObject {
    let objectWillChange = PassthroughSubject<Void, Never>()

    var brain: CalculatorBrain = .left("0") {
        willSet {
            //通知外界有事件要发生了 (此处的事件即驱动 UI 的数据将要发生改变)。
            objectWillChange.send()
        }
    }
    
    var brain: CalculatorBrain = .left("0")
}

Combine 中存在 @Published 封装,用来把一个 class 的属性值转变为 Publisher。它同时提供了值的存储和对外的 Publisher (通过投影符号 $ 获取)

在被 订阅时,当前值也会被发送给订阅者,它的底层其实就是一个 CurrentValueSubject:

@Published更被喵神形象的称为自动驾驶!