首页 > 解决方案 > 从子类访问在父类方法内部声明的变量(swift)

问题描述

我相当确定我在这里遗漏了一些明显的东西和/或做错了。

我有一个带有 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
    }
  }
}

标签: swiftclassoverridingsubclass

解决方案


函数中声明的变量不能从该范围之外访问,包括通过覆盖其行为的方法(除非您将它们用作该函数的返回,我们在这里不能这样做)。

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

或者,可能有另一种方法来实现这一点。这可能是一个候选,其中重复代码是将数据公开给所有子类的更可取的选择。


推荐阅读