簡體   English   中英

Swift中的NSDictionary:不能下標“AnyObject”類型的值嗎? 索引類型為'Int'

[英]NSDictionary in Swift:Cannot subscript a value of type 'AnyObject?' with a index of type 'Int'

所以我試圖使用swift解析JSON中的一些數據。 下面是我的代碼

var jsonResult:NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary

println(jsonResult)

上面的代碼將返回這樣的內容

{
 count = 100
 subjects = (
        {
         alt = "....."
         name = "....."
         },
         {
         alt = "....."
         name = "....."
         },

         ......
         )
}

然后我嘗試用jsonResult["subjects"]訪問所有主題,到目前為止很好但是當我嘗試訪問個別主題時,例如jsonResult["subjects"][0] ,Xcode給我錯誤: Cannot subscript a value of type 'AnyObject?' with an index of type 'Int' Cannot subscript a value of type 'AnyObject?' with an index of type 'Int'有人可以幫我這個嗎?

當您下載字典時,如jsonResult["subjects"] ,您將獲得一個可選項。 你需要解開Optional。 此外,因為這個字典是從JSON到達的,所以Swift不知道Optional包含什么類型的東西:它被輸入為AnyObject - 這就是Swift將Optional描述為AnyObject? 所以,你也告訴斯威夫特什么類型的對象這真的是-這是字典的一個數組,你需要告訴斯威夫特說,否則你將無法使用到它的下標[0]

你可以一次完成這兩件事,如下所示:

if let array = jsonResult["subjects"] as? [[NSObject:AnyObject]] {
    let result = array[0]
    // ...
}

如果你非常非常確定你的地面,你可以強制展開和鑄造,並將其減少到一行,如下所示:

let result = (jsonResult["subjects"] as! [[NSObject:AnyObject]])[0]

但我無法推薦。 有太多方法可以出錯。

至少使用Swift 2,你可以使用jsonResult [“subject”]作為! [AnyObject]

let data = try NSJSONSerialization.JSONObjectWithData(textData!, options: NSJSONReadingOptions.AllowFragments)  
let results = data["results"] as! [AnyObject]
let first = results[0]

你應該嘗試,

 var jsonResult:NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary
 let subjhectarry : NSArray = jsonResult["subjects"] as! NSArray
 let yourFirstObj : NSDictionary =  subjhectarry[0] as! NSDictionary

願這對你有所幫助。

暫無
暫無

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

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