我一直在研究 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/