【问题标题】:Swift 3.0: argument labels '(_:) do not match any available overloadsSwift 3.0:参数标签 '(_:) 不匹配任何可用的重载
【发布时间】:2016-09-13 21:23:37
【问题描述】:

我刚刚转换为 Swift 3,我需要帮助解决这个错误。我昨天转换为 swift 3 时遇到了这个错误,这个完整的代码运行良好。我试一下?在其中,但它根本没有修复错误,它保持不变。

import Foundation
import AVFoundation

class AudioHelper: NSObject, AVAudioPlayerDelegate {
    var player : AVAudioPlayer?


    class var defaultHelper : AudioHelper {
        struct Static {
            static let instance : AudioHelper = AudioHelper()
        }

        return Static.instance
    }

    override init() {
        super.init()
    }

    func initializeAudio() {
        let url = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("", ofType: "")!)
        self.player = try! AVAudioPlayer(contentsOfURL: url, fileTypeHint: nil)
        self.player?.numberOfLoops = -1
        self.player?.play()        
    }

    func stopAudio() {
        self.player?.stop()
        self.player?.prepareToPlay()
    }

    func startAudio() {
          AVAudioSession.sharedInstance().setActive(true, error: nil)
          self.player?.play()
    }


    func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
        AVAudioSession.sharedInstance().setActive(false, error: nil)
    }
}

【问题讨论】:

  • 查看the documentation 方法setActive(_:) - 它抛出而不是采用错误参数。因此,如果您不关心引发的错误,只需删除错误参数并在调用前加上 try?
  • 这对我的回答没有帮助,它是不同的。
  • @Hamish 说将你的两个 AVAudioSessiom.sharedInstance().setActive(false, error: nil) 实例更改为 try? AVAudioSession.sharedInstance().setActive(false),因为签名在 Swift 3 中发生了变化

标签: ios swift sprite-kit swift3 avaudiosession


【解决方案1】:

您可以通过以下方式处理异常:

do {
        try AVAudioSession.sharedInstance().setActive(true)
} catch {

}

没有抓到:

try? AVAudioSession.sharedInstance().setActive(true)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多