Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 迅捷之声不';我不能在斯威夫特工作_Ios_Swift - Fatal编程技术网

Ios 迅捷之声不';我不能在斯威夫特工作

Ios 迅捷之声不';我不能在斯威夫特工作,ios,swift,Ios,Swift,我在我的应用程序(射击游戏)上实现了声音效果。 但是,如果在触摸目标时设置声音,则有时不会播放该声音。 我不知道为什么有时会播放,但有时不会 代码: class ViewController: ViewController { var soundManager: SoundManager = SoundManager() //..... func touchedTarget(){ soundManager.playSE() } } clas

我在我的应用程序(射击游戏)上实现了声音效果。 但是,如果在触摸目标时设置声音,则有时不会播放该声音。
我不知道为什么有时会播放,但有时不会

代码:

class ViewController: ViewController {

    var soundManager: SoundManager = SoundManager()

    //.....

    func touchedTarget(){
        soundManager.playSE()
    }
}

class SoundManger {

    let tapSE: Sound = Sound(url:Bundle.main.url(forResource: "tap", withExtension: "mp3")!)!

    init(){

    }

    func playSE {
       tapSE.play(numberOfLoops: 0, completion: nil)
    }
}
编辑

class ViewController: ViewController {

    var soundManager: SoundManager = SoundManager()

    //.....

    func touchedTarget(){
        soundManager.playSE()
    }
}

class SoundManger {

    let tapSE: Sound = Sound(url:Bundle.main.url(forResource: "tap", withExtension: "mp3")!)!

    init(){

    }

    func playSE {
       tapSE.play(numberOfLoops: 0, completion: nil)
    }
}
1.在“playSE”中添加了“DispatchQueue.main.async{}”,但没有起作用

func playSE {
    DispatchQueue.main.async {
        tapSE.play(numberOfLoops: 0, completion: nil)
    }
}
func touchedTarget(){
    DispatchQueue.main.async {
        soundManager.playSE()
    }
}
2.在“touchedTarget()”中添加了“DispatchQueue.main.async{}”,但不起作用

func playSE {
    DispatchQueue.main.async {
        tapSE.play(numberOfLoops: 0, completion: nil)
    }
}
func touchedTarget(){
    DispatchQueue.main.async {
        soundManager.playSE()
    }
}

问题可能是您可能在后台线程上调用它,而它应该在主线程上

在视图控制器中或任何调用声音的位置,请尝试使用:

DispatchQueue.main.async {
    SoundManager().playSE()     
}

它不起作用…声音是按触摸5个目标播放的。你还应该向我们展示你如何播放声音的代码。没有人能够以其他方式剖析问题。没关系,你提供的细节越多,其他人能够提供的帮助就越多。我本应该指定,但我的意思是,你如何尝试从视图控制器而不是从声音管理器播放声音。再次抱歉。我添加了我尝试的代码以及如何从ViewController调用“playSE”。