从子类(交换)在父类的方法内部声明的访问变量

时间:2018-10-02 21:12:58

标签: swift class override subclass

我可以肯定的是,我在这里有些明显的失踪和/或做错了事。

我有一个带有handleTapped()函数的基类,该函数处理被点击的按钮。

在子类中,我想重写该函数,但需要访问在父类的handleTapped()函数中声明的变量。

例如:

class ParentClass {
  @objc func handleTapped(sender: UITapGestureRecognizer) {
    var a = [Int]()
    var b = 10

    if a[1] == b {
      // do something
    }    
  }
}

class SubClass: ParentClass {
  @objc override func handleTapped(sender: UITapGestureRecognizer) {
    super.handleTapped(sender: sender)
    if a[1] == b {
      // do something else
    }
  }
}

2 个答案:

答案 0 :(得分:0)

在函数范围内声明的变量不能从该范围之外访问,包括通过覆盖其行为的方法来访问(除非您将它们用作该函数的返回值,否则我们不能在此进行操作)。

在这种情况下,您需要将必要的信息存储在父类本身中,并确保正确设置了访问权限(内部或公共,取决于您的项目设置方式),以便子类可以访问和修改该数据。

或者,可以有替代的方法来实现这一点。在将数据公开给所有子类的情况下,重复代码是更可取的选择,这可能是一个候选方法。

答案 1 :(得分:0)

将变量从方法中带入类,如下所示:

class ParentClass {

    var a = [Int]()
    var b = 10

    func handleTapped(sender: UITapGestureRecognizer) {
        if a[1] == b {
            // do something
        }
    }
}

class SubClass: ParentClass {

    override func handleTapped(sender: UITapGestureRecognizer) {
        super.handleTapped(sender: sender)
        if a[1] == b {
            // do something else
        }
    }
}