I'm developing a music player by using Jukebox library. It has a delegation which warn elements when songs duration/ current time etc. changed. In Jukebox example, all of codes are in ViewController. Therefore, for example when current time changes, it also changes sliders value. I want to create a player class which is usable by more than one ViewController. When I put delegate methods inside this model class. How can I reach them in ViewController classes?
First Screenshot is first ViewController which has delegates methods and initialize player.
MainViewController I need to reach that delegate methods in secondViewController to update the UI.
class ViewController: UIViewController, JukeboxDelegate {
var jukebox : Jukebox!
override func viewDidLoad() {
    super.viewDidLoad()
    configureUI()
    // begin receiving remote events
    UIApplication.shared.beginReceivingRemoteControlEvents()
    // configure jukebox
    jukebox = Jukebox(delegate: self, items: [
        JukeboxItem(URL: URL(string: "http://www.kissfm.ro/listen.pls")!),
        JukeboxItem(URL: URL(string: "http://www.noiseaddicts.com/samples_1w72b820/2514.mp3")!),
        JukeboxItem(URL: URL(string: "http://www.noiseaddicts.com/samples_1w72b820/2958.mp3")!)
        ])!
}
// MARK:- JukeboxDelegate -
func jukeboxDidLoadItem(_ jukebox: Jukebox, item: JukeboxItem) {
    print("Jukebox did load: \(item.URL.lastPathComponent)")
}
func jukeboxPlaybackProgressDidChange(_ jukebox: Jukebox) {
    if let currentTime = jukebox.currentItem?.currentTime, let duration = jukebox.currentItem?.meta.duration {
        let value = Float(currentTime / duration)
        slider.value = value
        populateLabelWithTime(currentTimeLabel, time: currentTime)
        populateLabelWithTime(durationLabel, time: duration)
    } else {
        resetUI()
    }
}
func jukeboxStateDidChange(_ jukebox: Jukebox) {
    UIView.animate(withDuration: 0.3, animations: { () -> Void in
        self.indicator.alpha = jukebox.state == .loading ? 1 : 0
        self.playPauseButton.alpha = jukebox.state == .loading ? 0 : 1
        self.playPauseButton.isEnabled = jukebox.state == .loading ? false : true
    })
    if jukebox.state == .ready {
        playPauseButton.setImage(UIImage(named: "playBtn"), for: UIControlState())
    } else if jukebox.state == .loading  {
        playPauseButton.setImage(UIImage(named: "pauseBtn"), for: UIControlState())
    } else {
        volumeSlider.value = jukebox.volume
        let imageName: String
        switch jukebox.state {
        case .playing, .loading:
            imageName = "pauseBtn"
        case .paused, .failed, .ready:
            imageName = "playBtn"
        }
        playPauseButton.setImage(UIImage(named: imageName), for: UIControlState())
    }
    print("Jukebox state changed to \(jukebox.state)")
}
func jukeboxDidUpdateMetadata(_ jukebox: Jukebox, forItem: JukeboxItem) {
    print("Item updated:\n\(forItem)")
}
 
     
    