swift - 在 swift 类之间共享数据
问题描述
我调用了这个类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
:
AudioController().sources = ["Shakira"]
我得到:
致命错误:在展开可选值时意外发现 nil
和print("Sources: \(sources)")
回报sources []
。
解决方案
实际上,这里有一些奇怪的事情:如果您不使用共享实例,为什么会有共享实例?然后,您正在尝试播放一个空数组,也许这就是问题所在。尝试在启动播放器之前给出值
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
.
推荐阅读
- python - 切片每个第 n 个元素,而不是从第一个开始
- python - 带有屏蔽密码列的 QTableWidget
- kubernetes - Kubernetes中的服务端口可以相同吗
- c# - Linq 到 Sql。如何记录 SQL 查询?
- r - 复选框输入值 R 闪亮:如果 TRUE 则
- c++ - 对象的分配在 C++ 中不起作用
- excel - 在同一页上纵向打印 4 个自动过滤的列
- java - 将数据保存到 mysql 工作台时出现错误
- azure - 无法在 Azure AD 中的 access_token 中获取电子邮件声明
- arrays - 对象中数组中的图像未使用 React.js 显示