1
1
2
2
3
3
import UIKit
4
+ import Combine
4
5
5
6
protocol FlipsideViewControllerDelegate : AnyObject {
6
7
func flipsideViewControllerDidFinish( _ controller: FlipsideViewController )
@@ -17,9 +18,19 @@ class FlipsideViewController: UIViewController {
17
18
weak var delegate : FlipsideViewControllerDelegate !
18
19
19
20
var observers = Set < NSObject > ( )
21
+ var storage = Set < AnyCancellable > ( )
22
+ // async task
23
+ var task = Task {
24
+ let stream = NotificationCenter . default. notifications ( named: . woohoo)
25
+ for await _ in stream {
26
+ print ( " the observer still exists! " , self )
27
+ }
28
+ }
20
29
21
30
override func viewWillAppear( _ animated: Bool ) {
22
31
super. viewWillAppear ( animated)
32
+
33
+ // register observer
23
34
let ob = NotificationCenter . default. addObserver (
24
35
forName: . woohoo, object: nil , queue: nil ) {
25
36
[ unowned self] // *
@@ -28,6 +39,14 @@ class FlipsideViewController: UIViewController {
28
39
print ( self . description) // leak me, leak me
29
40
}
30
41
self . observers. insert ( ob as! NSObject )
42
+
43
+ // combine pipeline
44
+ NotificationCenter . default. publisher ( for: . woohoo)
45
+ . sink {
46
+ [ unowned self] // *
47
+ _ in
48
+ print ( " The observer still exists! " , self ) }
49
+ . store ( in: & self . storage)
31
50
}
32
51
33
52
override func viewDidDisappear( _ animated: Bool ) {
@@ -45,6 +64,7 @@ class FlipsideViewController: UIViewController {
45
64
for ob in self . observers {
46
65
NotificationCenter . default. removeObserver ( ob) // *
47
66
}
67
+ self . task. cancel ( ) // *
48
68
}
49
69
50
70
}
0 commit comments