2015-04-30 15 views
6

Vì vậy, tôi đang cố gắng phân tích cú pháp một số dữ liệu trong JSON bằng cách sử dụng nhanh chóng. dưới đây là mã của tôiNSDictionary trong Swift: Không thể chỉ định giá trị của loại 'AnyObject?' với chỉ mục kiểu 'Int'

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

println(jsonResult) 

Đoạn mã trên sẽ trở lại một cái gì đó như thế này

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

     ...... 
     ) 
} 

Sau đó, tôi cố gắng truy cập vào tất cả các đối tượng với jsonResult["subjects"], cho đến nay rất tốt Nhưng khi tôi cố gắng truy cập chủ đề cá nhân, ví dụ jsonResult["subjects"][0], Xcode cho tôi lỗi: Cannot subscript a value of type 'AnyObject?' with an index of type 'Int' Ai đó có thể giúp tôi với điều này không?

Trả lời

7

Khi bạn chỉ định từ điển, như trong jsonResult["subjects"], bạn sẽ nhận được Tùy chọn. Bạn cần phải tháo tùy chọn. Hơn nữa, vì từ điển này đến từ JSON, Swift không biết loại tùy chọn nào có chứa tùy chọn: nó được nhập là AnyObject - đó là lý do Swift mô tả tùy chọn là AnyObject?. Vì vậy, bạn cũng nói với Swift loại đối tượng này thực sự là là - đó là một loạt các từ điển và bạn cần phải nói với Swift rằng, hoặc bạn sẽ không thể subscript nó với [0].

Bạn có thể làm cả những điều trong một động thái duy nhất, như thế này:

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

Nếu bạn đang rất, rất chắc chắn về mặt đất, bạn có thể buộc các unwrapping và đúc, và giảm đến một một dòng, như sau:

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

Nhưng tôi không thể khuyên bạn nên làm như vậy. Có quá nhiều cách nó có thể đi sai.

+0

Cảm ơn bạn, hoàn toàn hoạt động – JSNoob

0

Bạn nên cố gắng như thế nào,

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 

May điều này giúp bạn.

2

Với Swift 2 ít nhất, bạn có thể làm với jsonResult ["subject"] dưới dạng! [AnyObject]

let data = try NSJSONSerialization.JSONObjectWithData(textData!, options: NSJSONReadingOptions.AllowFragments) 
let results = data["results"] as! [AnyObject] 
let first = results[0] 
Các vấn đề liên quan