I have upgraded to Swift 2.0 and I quite can't understand this when I try to record a sound:
Type of expression is ambiguous without more context
on var recordSettings
What should I do to fixt this error and more important, why?
var recordSettings = [
AVFormatIDKey: kAudioFormatAppleLossless,
AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
AVEncoderBitRateKey : 320000,
AVNumberOfChannelsKey: 2,
AVSampleRateKey : 44100.0
]
var dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
var docsDir: AnyObject = dirPaths[0]
var soundFilePath = docsDir.stringByAppendingPathComponent("tempRecordzz")
var soundFileURL:NSURL = NSURL(fileURLWithPath: soundFilePath)
var error: NSError?
do {
recorder = try AVAudioRecorder(URL: soundFileURL, settings: recordSettings)
} catch var error1 as NSError {
error = error1
recorder = nil
}
The type of kAudioFormatAppleLossless
changed from Int
(Swift 1.2/Xcode 6.4) to Int32
(Swift 2/Xcode 7) and UInt32
in Swift 7.0.1. The fixed sized integer types
like Int32
and UInt32
are not automatically bridged to NSNumber
objects
for insertion in an NSDictionary
.
An explicit conversion helps to resolve the issue:
let recordSettings = [
AVFormatIDKey: Int(kAudioFormatAppleLossless), // <-- HERE
AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
AVEncoderBitRateKey : 320000,
AVNumberOfChannelsKey: 2,
AVSampleRateKey : 44100.0
]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With