[英]How to assign a Dictionary to AnyObject in 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
這將返回Swift中的Dictionaries(NSDictionaries)。 但最后一行引發了一個錯誤:
字典'與'AnyObject'不同
我試過用過as! [AnyObject]
as! [AnyObject]
但是這引發了另一個錯誤:
'AnyObject'不是'Dictionary'的子類型
我沒有得到第二個錯誤,因為這不一定是一個子類型,反之亦然。 關於如何解決這個問題的任何想法? 我沒有找到幾個小時的谷歌和研究的答案。
Dictionary
是Swift中的結構,而AnyObject
是
///所有類隱式符合的協議。
根據您的嘗試,您可能希望在代碼中使用Any
,或者使用as NSDictionary
將字典轉換as NSDictionary
。
澄清后編輯:
如果從字典本身拆分append
調用,則會看到更好的錯誤消息:
因此,問題是您的字典包含一些Optional
值,但Optional是一個結構,不能轉換為Obj-C。 你可以通過施法來修復UIImage!
和AnyObject!
(ImplicitlyUnwrappedOptional),或者使用as!
。
您的代碼在游樂場中工作正常,沒有編譯或運行時錯誤。 這是我添加到填充curArr
:
var curArr:[Dictionary<String, AnyObject>] = [
[
"imageName" : "photo.jpg",
"colorDic" : ["red" : 1.0, "green" : 0.0, "blue" : 0.0],
"percentage" : 0.5
]
]
所有這些強制解包我想你只需要確保self.getItemsForCurrentStack()
返回的確實是你所期望的。
在操場上的結果:
[
"percentage": {Some 5.0e+-1},
"image": nil,
"color": {Some r 1,0 g 0,0 b 0,0 a 1,0}
]
我的建議是重構對象 - 這將使你的代碼更具可讀性!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.