【问题标题】:Swift superclass/subclass view controller variablesSwift 超类/子类视图控制器变量
【发布时间】:2014-11-17 21:53:59
【问题描述】:

我有一个超类UIViewController,其中包含:

var results: [AnyObject] = []

我在超类中还有其他基于results 数组内容的方法。

然后,通过从 REST API 加载数据以使用各种类型的数据填充 results 数组,我拥有从该超类继承的子类。

我目前不覆盖子类中的results 数组viewDidLoad() 或任何其他方法。我只需使用results = [] 清除数组,然后使用特定类类型加载数组,例如自定义类ProductString

results.append(Product())

我时常发生崩溃,但我不知道为什么。我怀疑这是由于继承的工作方式。我这样做正确吗?我应该在子类的init() 方法中覆盖results 还是使用`override var?

【问题讨论】:

  • 我认为你的问题有一些错误。您是否创建了一个全新的UIViewController 类?因为您无法将存储的属性添加到现有类(您没有源代码),或覆盖方法中的属性。或者,也许您将 superclasssubclass 与其他东西混淆了。可能一些代码会有所帮助...另外,最好知道在哪里崩溃发生
  • 在此处粘贴崩溃堆栈跟踪不会伤害任何人。
  • 抱歉,我现在无法访问代码。我可以稍后发帖。超类是 uiviewcontroller 的子类的新类。它包含一个表视图,它也实现了表委托。子类定义了如何加载特定类型的表。它在 results.append() 处崩溃。
  • 我也在尝试将 lazy 添加到 var 中。不确定这是否有帮助。

标签: ios arrays inheritance swift


【解决方案1】:

我认为类型转换可以在这里工作。
尝试在您的子类中执行此操作:

class SubClass: SuperClass {
    private var _results: [Product] = []
    override var results: [AnyObject] {
        get {
            return _results
        }
        set {
            _results = newValue as! [Product]
        }
    }
}

Product 必须是类,而不是结构或枚举。
此外,由于String 不符合AnyObject,您无法将Strings 保存在results 数组中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多