web-dev-qa-db-fra.com

Swift 2.0: le type d’expression est ambigu sans plus de contexte?

Ce qui suit travaillait dans Swift 1.2:

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

Maintenant, cela donne l'erreur:

"Expression de type est ambiguë sans plus de contexte".

42
lernerbot

Pour respecter le format requis [String : AnyObject] Requis par le paramètre recordSettings; En plus de la réponse de @ Unheilig, vous devrez convertir vos ints et floats en 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
]
35
Stephan

Vous pouvez donner plus d'informations au compilateur:

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

J'ai également eu ce message d'erreur en essayant d'initialiser un tableau d'optionals avec nil:

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

Le type d'expression 'Array <Egg>' est ambigu sans plus de contexte.

En changeant [Egg] à [Egg?] corrigé l'erreur.

4
rghome