Subscriber 觀察者
Publisher 發(fā)布者
Value 被觀察的對(duì)象的取值
在Swift 5.1中赦邻,可以利用@Published 輕松實(shí)現(xiàn)觀察者模式
假設(shè)老王是Subscriber忱详,他的兒子小明的考試成績(jī)是Value,小明的老師是Publisher圆凰。
老王想實(shí)時(shí)觀察小明的考試成績(jī),他就拜托老師,跟老師說(shuō)“每次有新的考試成績(jī)的時(shí)候衣厘,就發(fā)消息我垦细,我要看看小明有沒(méi)有好好學(xué)習(xí)”
上面的場(chǎng)景择镇,就生成了如下代碼
import Combine
public class Student {
@Published var score: Int = 0
public init(score: Int) {
self.score = score
}
}
let xiaoMing = Student(score: 0)
let teacher = xiaoMing.$score
var laoWang: AnyCancellable? = teacher.sink { (score) in
if score > 80 {
print("Cake")
} else {
print("Why")
}
}
xiaoMing.score = 50
xiaoMing.score = 90
laoWang = nil
xiaoMing.score = 95
輸出結(jié)果就是
Why
Why
Cake
生成xiaoMing實(shí)例對(duì)象的時(shí)候,score賦值0括改,打印第一個(gè)Why腻豌,
當(dāng)給score賦值50的時(shí)候,打印第二個(gè)Why嘱能,
當(dāng)給score賦值90的時(shí)候吝梅,打印第一個(gè)Cake。
此時(shí)laoWang覺(jué)得小明的成績(jī)上來(lái)了惹骂,就不想再觀察了苏携,laoWang值變?yōu)閚il,
當(dāng)score變?yōu)?5的時(shí)候对粪,由于觀察者laoWang已經(jīng)不再觀察右冻,以后的成績(jī)變化,就不會(huì)再知道了著拭。