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
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]]()
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]}]