web-dev-qa-db-fra.com

Le type contextuel 'AnyObject' ne peut pas être utilisé avec le dictionnaire littéral?

Je suis en train d'essayer de convertir un exemple Objective-C en Swift 2, mais je rencontre un petit problème. L'extrait de code Objective-C d'origine:

NSMutableArray *inputsOutputs = [NSMutableArray array];
...
[inputsOutputs addObject:@{@"input" : input, @"output" : trackOutput}];

et ce que je pensais que le code Swift devrait être:

var inputsOutputs = [Any?]()
...
inputsOutputs.append([ "input": input, "output": trackOutput ])

L'erreur résultante est:

Contextual type 'AnyObject' cannot be used with dictionary literal?

Comment pourrais-je convertir l'Objective-C dans ce cas à Swift?

Objectif d'origine-C: https://developer.Apple.com/library/mac/samplecode/avsubtitleswriterOSX/Listings/avsubtitleswriter_main_m.html

31
Andre M

Vous pouvez voir que le contenu du tableau est constitué de dictionnaires avec les clés String et les valeurs inconnues.

Donc déclarer le tableau plus spécifique

var inputsOutputs = [[String:AnyObject]]()

Dans Swift 3 pour les types de collection JSON ou si le dictionnaire/le tableau contient uniquement des types de valeur, utilisez

var inputsOutputs = [[String:Any]]()
37
vadian

Cela devrait aller, au moins dans Swift 2+. Je viens d'essayer ce qui suit dans un terrain de jeu:

var objects = [Any?]()
let dict = [ "one" : 1, "two" : 2 ]
objects.append(dict)  // prints [{["one": 1, "two": 2]}]
objects.append([ "one" : 1, "two" : 2 ]) // prints [{["one": 1, "two": 2]}, {["one": 1, "two": 2]}]
4
NRitH