Swift 中的 session.setPreferredInput?
Posted
技术标签:
【中文标题】Swift 中的 session.setPreferredInput?【英文标题】:session.setPreferredInput in Swift? 【发布时间】:2015-05-04 15:18:09 【问题描述】:我正在尝试将首选输入设置为我的 AVAudioEngine。我有以下代码:
var iphoneInput: AVAudiosessionPortDescription = AVAudioSession.sharedInstance().availableInputs[0] as! AVAudioSessionPortDescription
var error: NSError?
session.setPreferredInput(inPort: iphoneInput, error: error)
但是 Xcode 一直给我最后一行的错误,说明它不能使用类型为“(AVAudioSessionPortDescription,NSError?)”的争论列表调用 setPreferredinput
我假设它需要一个 NSErrorPointer 来处理错误,但我不知道如何快速创建一个。这是我的问题吗?如果是,我该如何创建?谢谢!
【问题讨论】:
【参考方案1】:在变量前添加&
字符使其成为指针:
var myError: NSError?
session.setPreferredInput(iphoneInput, error: &myError)
if myError == nil
// do stuff
注意:在 Swift 中,您不必使用方法的第一个参数的名称。
【讨论】:
这行得通!我只是将其保留为 nil,但这是正确的答案。谢谢!【参考方案2】:对于 swift 3 不起作用......你必须这样做(从 ADC 翻译: https://developer.apple.com/library/content/qa/qa1799/_index.html )
private func setupSession()
let session = AVAudioSession.sharedInstance()
// setup session:
do
try session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: .defaultToSpeaker)
try session.setActive(true)
catch _
// https://developer.apple.com/library/content/qa/qa1799/_index.html
// let portDescr = AVAudioSessionPortDescription()
// headers:
// AVAudioSessionPortLineIn: String // Line level input on a dock connector
// AVAudioSessionPortBuiltInMic: String // Built-in microphone on an iOS device
// AVAudioSessionPortHeadsetMic: String // Microphone on a wired headset. Headset refers to an accessory that has headphone outputs paired with a microphone.
// You cannot set directly..
// portDescr.portType = AVAudioSessionPortLineIn
guard let availableInputs = session.availableInputs else
return
var mic : AVAudioSessionPortDescription? = nil
for input in availableInputs
if input.portType == AVAudioSessionPortBuiltInMic
mic = input
guard mic != nil else
return
do
try session.setPreferredInput(mic)
catch _
print("cannot set mic ")
【讨论】:
以上是关于Swift 中的 session.setPreferredInput?的主要内容,如果未能解决你的问题,请参考以下文章