【问题标题】:Realm.io with AnyObject subscript带有 AnyObject 下标的 Realm.io
【发布时间】:2015-10-02 02:29:37
【问题描述】:

我即将在我的 Swift 2.0 应用中实现 Realm 模型。但是,一旦我 pod 安装 Realm。我的应用程序的 AnyObject 下标将导致编译错误

不能用“String”类型的索引为“AnyObject”类型的值下标

不能用“String”类型的索引为“RLMProperty”类型的值下标

从“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
}

【问题讨论】:

  • 这个问题在 Realm-Cocoa 存储库中也以Github issue 的形式提出。
  • 您能否提供有关此问题的更多信息?哪些行与这些错误相关联?
  • 我在项目中也看到了同样的错误。当我在项目的一个文件中导入 RealmSwift 时,它就出现了。除了 import 语句之外,它没有对 Realm 的任何引用。
  • @Happiehappie:你能解决我在 GitHub 问题上提出的问题吗?
  • @angelo:另一个问题是,除了 Realm 之外,您还导入了哪些其他 3rd 方框架?

标签: swift realm


【解决方案1】:

我自己也遇到了这个错误——诀窍就是当你希望通过下标访问属性时不要使用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 框架可以让这变得更容易!

【讨论】:

    猜你喜欢
    • 2015-01-09
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多