快速班级之间共享数据

时间:2019-04-03 15:19:35

标签: swift

我有一个名为sudo pip install mysqlclient 的类,它有一个名为AudioController()的变量,它是一个字符串数组。

sources代码:

AudioViewController()

但是。尝试通过import Foundation class AudioController { static let shared = AudioController() var sources = [String]() init() { print("Sources: \(sources)") let controller = RemoteCommandController() player = QueuedAudioPlayer(remoteCommandController: controller) player.remoteCommands = [ .stop, .play, .pause, .togglePlayPause, .next, .previous, .changePlaybackPosition ] try? audioSessionController.set(category: .playback) try? player.add(items: sources, playWhenReady: false) // fatal error here because sources is nil } } 时在我的另一个viewcontroller上:

sources

我得到:

  

致命错误:解开可选值时意外发现nil

,而AudioController().sources = ["Shakira"] 返回print("Sources: \(sources)")

2 个答案:

答案 0 :(得分:2)

实际上,这里有一些奇怪的事情:为什么不使用共享实例就拥有一个共享实例?然后,您尝试播放一个空数组,也许这就是问题所在。尝试开始之前提供值

class AudioController {
    static let shared = AudioController()
    var sources: [String]

    init(sources: [String]) {
      self.sources = sources
      print("Sources: \(sources)")
      let controller = RemoteCommandController()
      player = QueuedAudioPlayer(remoteCommandController: controller)
      player.remoteCommands = [
        .stop,
        .play,
        .pause,
        .togglePlayPause,
        .next,
        .previous,
        .changePlaybackPosition
      ]
      try? audioSessionController.set(category: .playback)
      try? player.add(items: self.sources, playWhenReady: false) // fatal error here because sources is nil
    }
}

// then instantiate the controller with sources
AudioController(sources: ["Shakira"])

但是我建议您检查一下设计。也许从init开始播放并不是一个好主意。

答案 1 :(得分:0)

如果要使用共享实例(我想是的话),请使用类似以下内容的

synchronized

您还应该添加AudioController.shared.sources = ["Shakira"] ,以防止意外初始化AudioController。这将创建一个私有初始化程序,该初始化程序不能在AudioController之外使用。

print语句将始终打印private init() {},因为调用init函数时,数组中还没有任何东西。