2015-10-02 2 views
1

Я собираюсь внедрить модели Realm в моем приложении Swift 2.0. Однако, как только я устанавливаю Realm. Мои AnyObject индексы для моего приложения приведет к ошибке компиляцииRealm.io с индексом AnyObject

Не может индексировать значение типа «AnyObject» с индексом типа «String»

Не может индексировать значение типа «RLMProperty» с индексом типа «String»

Условный литая из «RLMProperty» до «» AnyObject всегда удается

Но дело в том, на выходе не должно быть RLMProperty в первую очередь

Ниже мой код

var campaigns = [AnyObject]() 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let campaignCell = tableView.dequeueReusableCellWithIdentifier("campaignCell", forIndexPath: indexPath) as! CampaignTableViewCell 

    let outlet: AnyObject = (self.campaigns[indexPath.section]["surveys"]!![indexPath.row])["outlet"]!! 


    // Configure the cell... 
    campaignCell.outletID.text = outlet["code"] as? String 
    campaignCell.outletNameLabel.text = outlet["name"] as? String 
    //campaignCell.outletAddressLabel.text = outlet["outlet"]!!["address"] as? String 
    campaignCell.outletStatusLabel.text = (self.campaigns[indexPath.section]["surveys"]!![indexPath.row])["progress"]!!["name"] as? String 

    campaignCell.outletStatusLabel.textColor = UIColor.colorWithHexString(((self.campaigns[indexPath.section]["surveys"]!![indexPath.row])["progress"]!!["color"] as? String)!) 

    return campaignCell 
} 
+0

Этот вопрос был поднят также как вопрос [Github] (https://github.com/realm/realm-cocoa/issues/2623) в репо Realm-Cocoa. –

+0

Можете ли вы предоставить дополнительную информацию об этой проблеме? Какие строки связаны с этими ошибками? –

+0

Я тоже вижу эту ошибку в проекте. Он появился, как только я импортировал RealmSwift в один из файлов проекта. Это происходит без каких-либо ссылок на Realm, кроме инструкции import. – angelo

ответ

0

я встретил эту ошибку сам - трюк просто не использовать AnyObject, когда вы хотите получить доступ к свойствам с помощью индекса.

Скорее всего, ваш экземпляр (ы) AnyObject уже является словарем определенной формы. Если вы знаете, что ваши ключи - все строки, просто отбросьте свой объект на [String: AnyObject] - в противном случае используйте [NSObject: AnyObject]. В вашем образце также много разворачивается сила, и я боюсь, что просто прошу о сбоях! Итак, как бы я переписал ваш образец?

if let campaign = self.campaigns[indexPath.section] as? [String: AnyObject], 
    surveys = campaign["surveys"] as? [AnyObject], 
    survey = surveys[indexPath.row] as? [String: AnyObject], 
    outlet = survey["outlet"] as? [String: AnyObject] { 

    // Set up your cell here 

} 

Короткий рассказ, if-let - твой друг! Nil проверяет и набирает литье в одном!

Лучше еще, сопоставьте словари с классами/структурами и наслаждайтесь преимуществами сильной типизации - есть много сторонних структур Swift, чтобы сделать это намного проще!

Смежные вопросы