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

Контекстный тип "AnyObject" не может использоваться со словарным литералом?

Я пытаюсь преобразовать пример Objective-C в Swift 2, но я столкнулся с небольшой проблемой. Исходный Objective-C фрагмент:

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

и то, что я считал кодом Swift:

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

Результирующая ошибка:

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

Как бы преобразовать Objective-C в этом случае в Swift?

Оригинал Objective-C: https://developer.apple.com/library/mac/samplecode/avsubtitleswriterOSX/Listings/avsubtitleswriter_main_m.html

4b9b3361

Ответ 1

Вы можете видеть, что содержимое массива - это словари с ключами String и неизвестными значениями.

Поэтому объявите массив более конкретным

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

В Swift 3 для типов коллекции JSON или если словарь/массив содержит только типы значений, используйте

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

Ответ 2

Это должно быть прекрасно, по крайней мере, в Swift 2+. Я просто попробовал следующее на детской площадке:

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