可以在变量声明中创建 AVAudioPlayer() 并避免可选/展开吗?
Is it OK to create AVAudioPlayer() in variable declaration & avoid optionals / unwrapping?
我正在播放一个存储在 iOS 应用程序资产目录中的 mp3 文件,当我在应用程序范围内声明播放器时,我正在声明我的 AVAudioPlayer。我的代码工作正常,但我想知道这是否是不好的做法,如果是,为什么。大多数播放音频的代码示例将 AVPlayer 声明为可选但不在声明时创建播放器,如下所示:
var audioPlayer: AVAudioPlayer?
我在下面实现 b/c 没有任何对可选值或强制解包的引用(我自己只是在 Swift 中增加,但我将其用作早期 "Get Excited" 我的学生的例子,这样他们就可以在他们的第一个应用程序中播放媒体。希望推迟可选讨论'到以后)。
//声明AVAudioPlayer并分配一个空播放器
var audioPlayer = AVAudioPlayer()
// 调用此函数播放名为 "sound0"
的资产文件中的 mp3 声音
func playSound() {
if let sound = NSDataAsset(name: "sound0") {
do {
try audioPlayer = AVAudioPlayer(data: sound.data)
audioPlayer.play()
} catch {
print("ERROR: Couldn't create the AVAudioPlayer")
}
} else {
print("ERROR: Couldn't load sound file from asset catalog. Verify file is a valid sound file and that the name is correct.")
}
}
// 谢谢!
声明 AVAudioPlayer 很重要,以便在播放声音时保留对象,因此最好将播放器声明为 属性,就像您已经完成的那样。
我看到你的目标是想推迟到以后学习可选值,所以我明白你想通过将播放器设置为空播放器来实现什么。
我可能建议将播放器声明为隐式可选:
var audioPlayer: AVAudioPlayer!
隐式可选变量不需要解包 - 当您知道变量在使用前不会为 nil,但不能在 init 方法中初始化时,这很好。
您可以告诉您的学生不要担心“!”现在,它使 audioPlayer 的使用与您在代码示例中使用的相同。 (其实大部分IBOutlets在实现的时候都是这样声明的UI)
最好不要将播放器设置为空播放器,因为您正在为一个永远不会被使用的对象分配内存。
希望对您有所帮助!
我正在播放一个存储在 iOS 应用程序资产目录中的 mp3 文件,当我在应用程序范围内声明播放器时,我正在声明我的 AVAudioPlayer。我的代码工作正常,但我想知道这是否是不好的做法,如果是,为什么。大多数播放音频的代码示例将 AVPlayer 声明为可选但不在声明时创建播放器,如下所示:
var audioPlayer: AVAudioPlayer?
我在下面实现 b/c 没有任何对可选值或强制解包的引用(我自己只是在 Swift 中增加,但我将其用作早期 "Get Excited" 我的学生的例子,这样他们就可以在他们的第一个应用程序中播放媒体。希望推迟可选讨论'到以后)。
//声明AVAudioPlayer并分配一个空播放器
var audioPlayer = AVAudioPlayer()
// 调用此函数播放名为 "sound0"
的资产文件中的 mp3 声音func playSound() {
if let sound = NSDataAsset(name: "sound0") {
do {
try audioPlayer = AVAudioPlayer(data: sound.data)
audioPlayer.play()
} catch {
print("ERROR: Couldn't create the AVAudioPlayer")
}
} else {
print("ERROR: Couldn't load sound file from asset catalog. Verify file is a valid sound file and that the name is correct.")
}
}
// 谢谢!
声明 AVAudioPlayer 很重要,以便在播放声音时保留对象,因此最好将播放器声明为 属性,就像您已经完成的那样。
我看到你的目标是想推迟到以后学习可选值,所以我明白你想通过将播放器设置为空播放器来实现什么。
我可能建议将播放器声明为隐式可选:
var audioPlayer: AVAudioPlayer!
隐式可选变量不需要解包 - 当您知道变量在使用前不会为 nil,但不能在 init 方法中初始化时,这很好。
您可以告诉您的学生不要担心“!”现在,它使 audioPlayer 的使用与您在代码示例中使用的相同。 (其实大部分IBOutlets在实现的时候都是这样声明的UI)
最好不要将播放器设置为空播放器,因为您正在为一个永远不会被使用的对象分配内存。
希望对您有所帮助!