arrays - 如何快速将字典分配给 AnyObject

标签 arrays swift dictionary casting

我一直在研究 Swift。我在类型方面遇到过多个错误,尤其是在使用 Swift 和我的旧 Objective-C 类时。这种方法的问题是:我期待一个由 Objective-C 中的 NSDictionary 组成的数组。

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

这会返回 Swift 中的字典(NSDictionaries)。但最后一行抛出一个错误:

Dictionary' is not identical to 'AnyObject'

我试过使用 as! [任何对象]

但这会引发另一个错误:

'AnyObject' is not a subtype of 'Dictionary'

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

最佳答案

Dictionary 是 Swift 中的结构,而 AnyObject

/// The protocol to which all classes implicitly conform.

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


澄清后编辑:

如果您将 append 调用与字典本身分开,您会看到更好的错误消息:

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

关于arrays - 如何快速将字典分配给 AnyObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29722774/

相关文章:

c - 如何在模运算之前键入 uint32 数组的强制转换元素?

ios - Swift 出错,需要帮助 : property 'self.circle1' not initialized at super. 初始化调用

python - 如何从具有两列的 CSV 创建字典作为 Python 中的键

c - 为什么 C 会有 "fake arrays"?

arrays - SWIFT:inputString.componentsSeparatedBy 生成 Int 数组?

Python 二维数组 i C 使用 ctypes

python - 具有来自单个列表的嵌套类别的字典

ios - Swift-如何将选项卡栏和导航栏添加到单个 View Controller ?

ios - 无法在 Swift 的另一个协议(protocol)中将协议(protocol)用作关联类型

Python:简单字典引用问题