1
1
2
2
import UIKit
3
+ import MediaPlayer
3
4
import Combine
4
5
5
6
class ViewController : UIViewController {
@@ -9,6 +10,7 @@ class ViewController: UIViewController {
9
10
10
11
var observers = Set < NSObject > ( )
11
12
var storage = Set < AnyCancellable > ( )
13
+ var pipeline : AnyCancellable ?
12
14
var task : Task < ( ) , Never > ?
13
15
override func viewDidLoad( ) {
14
16
super. viewDidLoad ( )
@@ -37,6 +39,47 @@ class ViewController: UIViewController {
37
39
default : break
38
40
}
39
41
}
42
+
43
+ func test( ) { // just showing syntax; these are not proper tests, that needs doing
44
+ do {
45
+ let ob = NotificationCenter . default. addObserver (
46
+ forName: . MPMusicPlayerControllerNowPlayingItemDidChange,
47
+ object: nil , queue: nil ) { [ unowned self] _ in
48
+ self . updateNowPlayingItem ( )
49
+ // ... and so on ...
50
+ }
51
+ self . observers. insert ( ob as! NSObject )
52
+ // ...
53
+ for ob in self . observers {
54
+ NotificationCenter . default. removeObserver ( ob)
55
+ }
56
+ }
57
+ do {
58
+ self . pipeline = NotificationCenter . default. publisher (
59
+ for: . MPMusicPlayerControllerNowPlayingItemDidChange)
60
+ . sink { [ unowned self] _ in
61
+ self . updateNowPlayingItem ( )
62
+ // ... and so on ...
63
+ }
64
+ // ...
65
+ self . pipeline? . cancel ( )
66
+ self . pipeline = nil
67
+ }
68
+ do {
69
+ let stream = NotificationCenter . default. notifications (
70
+ named: . MPMusicPlayerControllerNowPlayingItemDidChange)
71
+ let task = Task {
72
+ for await _ in stream {
73
+ self . updateNowPlayingItem ( )
74
+ // ... and so on ...
75
+ }
76
+ }
77
+ self . task = task
78
+ // ...
79
+ self . task? . cancel ( )
80
+ self . task = nil
81
+ }
82
+ }
40
83
41
84
@IBAction func unwind( _: UIStoryboardSegue ) { }
42
85
@@ -54,5 +97,7 @@ class ViewController: UIViewController {
54
97
// self.task = nil
55
98
}
56
99
100
+ func updateNowPlayingItem( ) { }
101
+
57
102
}
58
103
0 commit comments