Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift 2.0: Type of Expression is ambiguous without more context?

The following used to work in Swift 1.2:

var recordSettings = [
    AVFormatIDKey: kAudioFormatMPEG4AAC,
    AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
    AVEncoderBitRateKey : 320000,
    AVNumberOfChannelsKey: 2,
    AVSampleRateKey : 44100.0]

Now, it gives the error:

"Type expression is ambiguous without more context".

like image 473
lernerbot Avatar asked Sep 19 '15 02:09

lernerbot


3 Answers

You could give the compiler more information:

let recordSettings : [String : Any] =
[
    AVFormatIDKey: kAudioFormatMPEG4AAC,
    AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
    AVEncoderBitRateKey : 320000,
    AVNumberOfChannelsKey: 2,
    AVSampleRateKey : 44100.0
]
like image 87
Unheilig Avatar answered Nov 06 '22 12:11

Unheilig


To comply to the required [String : AnyObject] format required by recordSettings parameter; In addition to @Unheilig's answer, you'll need to convert your ints and floats to NSNumber:

let recordSettings : [String : AnyObject] =
[
    AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC),
    AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue as NSNumber,
    AVEncoderBitRateKey : 320000 as NSNumber,
    AVNumberOfChannelsKey: 2 as NSNumber,
    AVSampleRateKey : 44100.0 as NSNumber
]
like image 43
Stephan Avatar answered Nov 06 '22 13:11

Stephan


I also got this error message trying to initialise an array of optionals with nil:

var eggs : [Egg] = Array<Egg>(count: 10, repeatedValue: nil)

Expression Type 'Array<Egg>' is ambiguous without more context.

Changing [Egg] to [Egg?] fixed the error.

like image 4
rghome Avatar answered Nov 06 '22 12:11

rghome