我可以肯定的是,我在这里有些明显的失踪和/或做错了事。
我有一个带有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
}
}
}
答案 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
}
}
}