Контекстный тип "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
Ответы
Ответ 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]}]