Подтвердить что ты не робот

Swift 2.0: Тип выражения неоднозначен без дополнительного контекста?

Следующие данные используются для работы в Swift 1.2:

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

Теперь он дает ошибку:

"Выражение типа неоднозначно без дополнительного контекста".

4b9b3361

Ответ 1

Вы можете предоставить компилятору дополнительную информацию:

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

Ответ 2

Соответствовать требуемому формату [String : AnyObject], требуемому параметром recordSettings; В дополнение к ответу @Unheilig вам нужно будет преобразовать ваши ints и floats в 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
]

Ответ 3

Я также получил это сообщение об ошибке, пытающееся инициализировать массив опций с nil:

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

Тип выражения 'Array <Egg> ' неоднозначно без дополнительного контекста.

Изменение [Egg] до [Egg?] исправило ошибку.