带有 AnyObject 下标的 Realm.io

Posted

技术标签:

【中文标题】带有 AnyObject 下标的 Realm.io【英文标题】:Realm.io with AnyObject subscript 【发布时间】: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 方框架? 【参考方案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 框架可以让这变得更容易!

【讨论】:

以上是关于带有 AnyObject 下标的 Realm.io的主要内容,如果未能解决你的问题,请参考以下文章

斯威夫特:'(字符串)-> AnyObject?没有名为“下标”的成员

类型 (string , anyobject) 没有下标成员

类型'(String,AnyObject)'在swift中没有下标成员

错误无法下标“AnyObject?”类型的值在 NSTimer 的 userInfo 中使用数组

无法使用“String”类型的索引为“[String : AnyObject]”类型的值下标

[NSObject:AnyObject]?在 Xcode 6 beta 6 中没有名为“下标”的成员错误