上下文类型' AnyObject'不能与字典文字一起使用?

时间:2016-02-26 22:50:52

标签: swift swift2

我正在尝试将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?

原始目标-C:https://developer.apple.com/library/mac/samplecode/avsubtitleswriterOSX/Listings/avsubtitleswriter_main_m.html

2 个答案:

答案 0 :(得分:36)

您可以看到数组的内容是带有String个键和未知值的字典。

因此声明数组更具体

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

在Swift 3中,对于JSON集合类型,或者如果字典/数组仅包含值类型,请使用

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

答案 1 :(得分:4)

应该没问题,至少在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]}]