我有一个名为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)")
。
答案 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函数时,数组中还没有任何东西。