从singleton类调用方法时的空变量

时间:2016-10-05 17:20:24

标签: ios swift delegation

所以我有一个单例类,我已经实现了我的模块的委托。但是当在这个单例中执行该委托方法时,我在App的另一个类中调用一个方法,它崩溃了,因为之前在该类中设置的所有变量都是空的。

class Player: Jukebox, JukeboxDelegate {

    static let sharedInstance = Player()

    func setDelegate(){
        jukebox = Jukebox(delegate: self)
    }

    func play(Link: String) {
        jukebox.setIT([JukeboxItem(URL: NSURL(string: Link)!)])
        jukebox.setImage(currentImage)
        jukebox?.play()
    }

    func audioPlayerDidFinishPlaying(player: Jukebox, successfully flag: Bool) {
        if pltype == PlayerType.Playlist {
            MyMusicVC.continuePlaying() { () -> () in
            }

        }
    }

    func jukeboxStateDidChange(state: Jukebox) {

    }


    func jukeboxPlaybackProgressDidChange(jukebox: Jukebox) {

    }

    func jukeboxDidLoadItem(jukebox: Jukebox, item: JukeboxItem) {

    }

    func jukeboxDidUpdateMetadata(jukebox: Jukebox, forItem: JukeboxItem) {

    }
}

关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:2)

很难理解发生了什么。但是你是一个Jukebox类的子类。然后使这个子类成为Jukebox本身的委托。然后我还注意到你正在设置一个看似可选但不是的Jukebox属性。

例如。为什么play()函数是jukebox。使用了两次,但最后一行是点唱机?点唱机是可选的吗?或隐含地解开?如果是这样的话,你为什么要用它解开两次,然后再选择第三次。

您是否尝试过不将此单例作为自动点唱机的子类。相反,只需使它符合JukeBoxDelegate协议,看看它是否实现了相同的目标?