上下文类型“AnyObject”不能与字典文字一起使用?
Posted
技术标签:
【中文标题】上下文类型“AnyObject”不能与字典文字一起使用?【英文标题】:Contextual type 'AnyObject' cannot be used with dictionary literal? 【发布时间】:2016-02-26 22:50:51 【问题描述】:我正在尝试将 Objective-C 示例转换为 Swift 2,但遇到了一个小问题。原Objective-C sn-p:
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
【问题讨论】:
在我的例子中,答案是向分配给Any
的字典文字添加一个强制转换...不幸的是,我无法提出一个必要的简单示例:(跨度>
【参考方案1】:
可以看到数组的内容是带有String
键和未知值的字典。
因此更具体地声明数组
var inputsOutputs = [[String:AnyObject]]()
在 Swift 3 中用于 JSON 集合类型,或者如果字典/数组只包含值类型,则使用
var inputsOutputs = [[String:Any]]()
【讨论】:
谢谢,我原以为这是一个 JSON 类型对象的数组。不知道 ObjC,它没有帮助。【参考方案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]]
【讨论】:
我以为我使用的是 Swift 2+ 和 XCode 7.2.1。不确定在哪里检查 Swift 版本一致性设置? Xcode 7 使用 Swift 2,所以您已经回答了这个问题。您看到的错误是否可能出现在某个 不同的 行上?如果您尝试在AnyObject
上使用下标,就会看到这种错误。以上是关于上下文类型“AnyObject”不能与字典文字一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 上下文类型 anyobject 不能与字典文字一起使用
上下文类型 'Any' 不能与数组文字 Swift 3 一起使用
尝试从数组中删除元素时出现此错误:上下文类型“Int”不能与数组文字一起使用
如何在 Swift 中将键值对添加到类型为 [String:AnyObject] 的字典中?
上下文类型“Void”(又名“()”)不能与数组字面量一起使用
上下文闭包类型 Response<AnyObject> -> void 需要 1 个 agrument,但 3 个在闭包主体中