ios - 无法遍历数组

标签 ios swift

我试图在解析 json 时从本地服务器获取一些数据。在 View Controller 中,我访问本地 Ruby on Rails 服务器:

override func viewDidLoad() {
    super.viewDidLoad()

    var url = NSURL(scheme: "http", host: "0.0.0.0:3000", path: "/api/search?query=auto")
    var request = NSURLRequest(URL: url)

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {(data, response, error) in
    var data1: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
        println(data1)
        println(data1["companies"])
        var companies = data1["companies"] as NSArray
        for company: AnyObject in companies {
            println(company)
        }
    }
    task.resume()
}

println(data1) 返回:

{
    companies = "[{\"alias\":\"02-avtomoyka-tulybaev-r-t\",\"id\":45693},{\"alias\":\"1001-zapchast-internetmagazin-avtotovarov\",\"id\":42621}]";
}

使用 println(data1["companies"]),我在控制台中得到了对象数组:

[{"alias":"02-avtomoyka-tulybaev-r-t","id":45693},{"alias":"1001-zapchast-internetmagazin-avtotovarov","id":42621}]

然后,当我尝试迭代该数组时,应用程序崩溃了。我究竟做错了什么? 控制台中没有错误,但 Tread 6 中出现 (lldb)EXC_BREAKPOINT(code=EXC_I386_BPT, subcode 0x0)

PS:Xcode 还抛出了编译器问题 Constant 'company' inferred to have type 'AnyObject', which may be unexpected at for company in companys { string.我该如何处理?

最佳答案

尝试 var companies = data1["companies"].allValues; 而不是 var companies = data1["companies"] as NSArray

问题是 data1["companies"] 是一个字典,不能隐式转换为 NSArray。编译器没有捕捉到这一点,因为 data1["companies"] 作为 AnyObject 存储在 NSDictionary 中,并且允许您将其转换为任何子类。

关于ios - 无法遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24379380/

相关文章:

ios - Swift Sqlite 模型绑定(bind)

iOS OS 10.3.3 与 Alamofire POST(内容类型 JSON)问题

iphone - UITableViewCell sizeToFit 中的 UITextView 未按预期工作

objective-c - NStimer 和 UINavigationController

swift - 为什么 ImageView 有时不会出现在 Collection View 单元格中?

ios - 如何将整个可滚动的 UITableView 保存为 PNG

ios - 在 Swift 4 中动态更改状态栏颜色

ios - UILabel 的自动滚动功能

ios - 当应用程序处于后台或运行状态时而不是应用程序终止时处理推送通知

ios - 更改按钮的标题会阻止进一步的操作吗?