簡體   English   中英

如何在swift中將Dictionary分配給AnyObject

[英]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}
]

我的建議是重構對象 - 這將使你的代碼更具可讀性!

在Swift 3中

code:

var curArr:[Dictionary<String, Any>] = [
[
        "imageName" : "photo.jpg",
        "colorDic" :[
            "red" : 1.0,
            "green" : 0.0,
            "blue" : 0.0
        ],
        "percentage" : 0.5
    ]
]

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM