我最近参与了SwiftUI的开发,并开始以声明式的方式编写代码.但随之而来的是一个困惑.如下所示,我想要(1)加载歌曲数据和(2)在为song
赋值之后,通过设置isInfoViewShown
来显示视图.
我假设didSet{}
和Combine @Published .sink{}
是互换的.所以我想问一问,它们之间有什么不同?在我个人看来,didSet{}
可以做Combine
个工作中的大部分.那么,苹果为什么要宣布Combine
框架呢?
如有任何帮助,我们不胜感激.
class InfoViewModel: ObservableObject {
@Published var song: Song? {
didSet { // Here's the didSet{}: [1] load song data
if let song = song {
load(song: song)
}
}
}
private var songSelectedSubscription: AnyCancellable?
@Published var isInfoViewShown: Bool = false
init() { // Here's the Combine @Published .sink{}: [2] show the view
songSelectedSubscription = $song.sink{ self.isInfoViewShown = ($0 == nil ? false : true) }
}
}