2016-09-10 19 views
10

Im sử dụng Swift 3 và Alamofire 4.0. Tôi có thể in ra toàn bộ phản hồi nhưng tôi gặp sự cố lặp lại và in ra từng giá trị. Tôi nhận được một "Loại 'NSFastEnumerationIterator.Element' (aka 'Any') không có thành viên subscript khi tôi cố gắng để in ra 'danh hiệu' bên dưới. Any help is appreciated rất nhiều.Swift 3 JSON NSFastEnumerationIterator không có thành viên subscript

Alamofire.request(url).responseJSON { response in 
     if let dict = response.result.value as? Dictionary<String, AnyObject> { 
      if let datas = dict["data"] as? NSArray{ 
       for data in datas{ 
        print("DEVELOPER: \(data)") 
         if let title = data["myTitle"] as? String{ 
          print(title) 
         } 

       } 
      } 
     } 
    } 
+0

không nhận được câu hỏi của bạn đúng cách !! – Lion

+0

@KetanParmar Tôi nhận được thông báo lỗi "Loại" NSFastEnumerationIterator.Element '(aka' Any ') không có thành viên subscript ". Lỗi xảy ra khi tôi đang cố gắng in 'tiêu đề'. – kelsheikh

Trả lời

29

Chỉ cần sử dụng có nguồn gốc Swift Array . Sử dụng luôn loại bản địa Swift trừ khi bạn hoàn toàn không có sự lựa chọn. NSArray thiếu gõ thông tin để trình biên dịch không thể suy ra rằng mảng chứa từ điển.

if let datas = dict["data"] as? [[String:Any]] { 
+0

Cảm ơn bạn rất nhiều, đó là điều tuyệt đối. – kelsheikh

+0

Cảm ơn bạn rất nhiều vì câu trả lời này !!! – Hiren

0

Đôi khi bạn muốn giữ cho dữ liệu của bạn như cấu trúc, tất cả các bạn phải làm là kiểm tra từ điển chính nó wh ile in loop như sau:

for apple in apples { 
if let _ = apple as? [String:AnyObject] { 
// do whatever you like here 
    } 
} 
+0

Tôi đồng ý, nhưng việc sử dụng một mảng [[String: AnyObject]] sẽ tước bạn khỏi tất cả các chức năng hữu ích gắn liền với nó. Thêm, xóa, tìm kiếm chỉ mục và v.v ... – Giggs

Các vấn đề liên quan