如何在swift中将Dictionary分配给AnyObject

use*_*014 6 arrays dictionary casting swift

我一直在玩Swift.我有类型的多个错误,特别是使用Swift和我的旧Objective-C类.这个方法的问题是:我期待在Objective-C中由NSDictionarys组成的数组.

var curArr:[Dictionary<String, AnyObject>] = self.getItemsForCurrentStack()
var arrToReturn:[(Dictionary<String, AnyObject?>)] = []
for obj in curArr{
    arrToReturn.append(["image": UIImage(named: obj["imageName"] as! String), "color": UIColor(red:obj["colorDic"]!["red"] as! CGFloat, green:obj["colorDic"]!["green"] as! CGFloat, blue:obj["colorDic"]!["blue"] as! CGFloat, alpha:1.0), "percentage": obj["percantage"]])
}
return arrToReturn
Run Code Online (Sandbox Code Playgroud)

这将返回Swift中的Dictionaries(NSDictionaries).但最后一行引发了一个错误:

字典'与'AnyObject'不同

我试过用了 as! [AnyObject]

但是这引发了另一个错误:

'AnyObject'不是'Dictionary'的子类型

我没有得到第二个错误,因为这不一定是一个子类型,反之亦然.关于如何解决这个问题的任何想法?我没有找到几个小时的谷歌和研究的答案.

jtb*_*des 8

Dictionary是在夫特一个结构,而AnyObject

///所有类隐式符合的协议.

根据您要执行的操作,您可能希望Any在代码中使用,或者使用字典将字典转换为NSDictionary as NSDictionary.


澄清后编辑:

如果append从字典本身拆分调用,则会看到更好的错误消息:

所以,问题是你的字典包含一些Optional值,但Optional是一个结构,不能转换为Obj-C.您可以通过铸造修复UIImage!AnyObject!(ImplicitlyUnwrappedOptional),或使用as!.