@ObservedObject 修饰一个object,也就是修饰一个对象.这个对象可以被其他的类使用.但是这个类首先要遵循ObervableObject协议,并且内部变量使用**@Published** 来修饰.
声明一个ObservedObject
import Foundation
//:需要引入这个类
import Combine
final class PodcastPlayer: ObservableObject {
@Published private(set) var isPlaying: Bool = false
func play() {
isPlaying = true
}
func pause() {
isPlaying = false
}
}
上述代码,声明一个player来.该类的isPlaying 属性不能被外部修改.只能通过 两方法来修改.
下面我们来使用这个类:
创建一个View
struct ProductView: View {
@ObservedObject var player: PodcastPlayer
var body: some View {
Button (action: {
if player.isPlaying {
player.pause()
}else {
player.play()
}
}) {
let buttonTitle = player.isPlaying ? "哈哈哈" : "啦啦啦啦"
Text(buttonTitle)
}
}
}
@ObservedObject var player: PodcastPlayer 在当前类使用player的声明.并且需要在使用的ProductView的地方传入一个默认的player,不然会报错,如下:
struct ContentView: View {
@StateObject private var modelData = ModelData()
var body: some View {
ProductView(player: PodcastPlayer())
}
}
这个时候我们运行代码:点击按钮会发现按钮的标题在改变.我们调用player.play 和 pause 方法 来改变 isPlaying的值.相应引用的位置的UI也进行了刷新