ios - 从单例类调用方法时变量为空

标签 ios swift delegation

所以我有一个单例类,我在其中实现了模块的委托(delegate)。然而,当该委托(delegate)方法在此单例中执行时,我调用应用程序的另一个类中的方法,并且它崩溃了,因为先前在该类中设置的所有变量都是空的。

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) {

    }
}

关于为什么会发生这种情况有什么想法吗?

最佳答案

很难理解发生了什么。但是您正在对 Jukebox 类进行子类化。然后使该子类成为 Jukebox 本身的委托(delegate)。然后我还注意到您正在设置一个似乎是可选的 Jukebox 属性,但实际上并非如此。

例如。为什么在 play() 函数中是点唱机。使用了两次,但最后一行是点唱机?自动点唱机是可选的吗?还是隐式地解开?如果是这样,为什么你要使用它两次,然后可选地第三次。

您是否尝试过不让这个单例成为自动点唱机的子类。相反,只需使其符合 JukeBoxDelegate 协议(protocol),看看是否可以实现相同的目标?

关于ios - 从单例类调用方法时变量为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39880159/

相关文章:

ios - 无法加载单元测试的底层模块

ios - Swift:Force unwrap 是 nil 但没有崩溃......?

kotlin - 如何在 Kotlin 中嵌套多个属性委托(delegate)

ios - iOS Swift 上的 Azure 推送通知

ios - Azre iOS 客户端 SDK 中的乐观并发

ios - _UILayoutGuide bottomLayoutGuide 长度为零

json - NSDataBase64DecodingOptions 返回 nil 值

iphone - 帮助我了解此代码 : 的泄漏

ios - 委托(delegate)协议(protocol)的实现方法在哪里调用?

ios - CreateJS EaselJS在iOS中绘制位图视频