从Swift中的模拟调用super

时间:2017-01-12 19:22:25

标签: ios swift xctest

我正在跟随Swift中的一个示例模拟器,当我们正在测试的函数被调用时,它将变量设置为true但是我不清楚的是我们似乎覆盖了子类中的函数,即mock然后我们返回它的父对方法的再现。我假设覆盖的工作方式是我们用我们想要的逻辑重写函数,当我们这样做时,我假设包含原始函数的父类完全不知道子类如何处理函数?

以下是示例代码:

extension ItemListDataProviderTests{
class MockTableView: UITableView {
    var cellGotDequeued = false


    override func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell {

        cellGotDequeued = true

        return super.dequeueReusableCell(withIdentifier: identifier, for: indexPath)

    }
}

如何返回父方法调用重写函数并将测试变量设置为true?我假设通过调用super它将运行父级的逻辑而不会触发子级的重写方法。

1 个答案:

答案 0 :(得分:1)

您展示的方法

  1. cellGotDequeued设置为true
  2. 调用父类的dequeueReusableCell
  3. 实现
  4. 返回从父类的实现返回的结果(不是“父方法的方法”)
  5. 您是正确的,父类不知道子类如何覆盖此方法。

    调用super会调用父类的实现,但在子类实现期间会这样做,并且绝不会阻止子实现执行。子类使用super确定是否应该调用父实现,如果是,则应该在之前或之后执行任何其他操作。