2015-11-16 16 views
11

Tôi đang cố lấy một số dữ liệu từ nội dung JSON (trong tệp data.swift của tôi) và gán nó cho "nhận xét ". Bất cứ ai biết những gì đang xảy ra sai ở đây và làm thế nào tôi có thể sửa chữa nó? Có vẻ như một vấn đề cú pháp mà tôi gặp rắc rối với.Không thể chỉ định giá trị kiểu '[String: AnyObject]' với chỉ mục loại 'Chuỗi'

Các lỗi Tôi nhận: The error I am getting

import UIKit 

class CommentsTableViewController: UITableViewController { 

var story = [String:AnyObject]() 
var comments = [String:AnyObject]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    comments = story["comments"] 

    tableView.estimatedRowHeight = 140 
    tableView.rowHeight = UITableViewAutomaticDimension 
} 

Nó không thích phần comments = story["comments"].

Trả lời

22

Có lỗi trong mã của bạn, nhưng thông báo lỗi bạn thấy không đúng và gây hiểu lầm do lỗi trình biên dịch Swift. Thông báo lỗi thực tế nên đọc: AnyObject is not convertible to [String:AnyObject].

self.story["comments"] trả về một AnyObject. Để gán giá trị đó cho self.comments, trước tiên bạn phải nhập số AnyObject vào loại Từ điển [String:AnyObject].

Ví dụ:

self.comments = self.story["comments"] as! [String:AnyObject] 
+0

Cảm ơn Darren. Tôi đã làm như vậy và sau khi chạy nó bị rơi và đã cho tôi tin nhắn này: Không thể cast giá trị của loại 'Swift._SwiftDeferredNSArray' (0x10716fff0) để 'NSDictionary' (0x104b46d60). Mẹo về cách tiến hành? – hkhan

+0

Lỗi thời gian chạy có nghĩa là 'câu chuyện [" ý kiến ​​"]' thực sự chứa một mảng chứ không phải từ điển mà bạn đang mong đợi. Bạn có thể sử dụng trình gỡ rối để đặt điểm ngắt và kiểm tra nội dung của 'self.story' hoặc bạn có thể in nội dung bằng cách sử dụng' NSLog ("% @", self.story) '. Hoặc, bạn có thể khai báo 'self.comments' làm mảng thay vì từ điển (và thay đổi kiểu chữ phù hợp). – Darren

0

Theo tờ khai của riêng bạn, story[String:AnyObject]. Điều đó có nghĩa là story["comments"] là một AnyObject. Nhưng comments[String:AnyObject], không phải một AnyObject. Bạn không thể chỉ định một AnyObject trong đó một dự kiến ​​là [String:AnyObject].

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