我有一个名为 GamePlay 的 ViewController 类。在 GamePlay 中有一个名为 MyPinAnnotationView 的嵌套类。当调用 MyPinAnnotation 的方法 TouchesBegan() 时,我想从父 GamePlay 调用方法 CheckAnswer()。
我不想创建新的 GamePlay 实例,因为我已经设置了变量和实例。我可以通过某种方式访问父母吗?(事件监听器除外)
我有一个名为 GamePlay 的 ViewController 类。在 GamePlay 中有一个名为 MyPinAnnotationView 的嵌套类。当调用 MyPinAnnotation 的方法 TouchesBegan() 时,我想从父 GamePlay 调用方法 CheckAnswer()。
我不想创建新的 GamePlay 实例,因为我已经设置了变量和实例。我可以通过某种方式访问父母吗?(事件监听器除外)
嵌套类将只能引用父类中的静态成员。如果要访问实例成员,则需要获取对实例的引用。最简单的方法是将它作为参数添加到构造函数中,MyPinAnnotationView
如下所示:
class MyPinAnnotationView
{
private GamePlay gamePlay;
public MyPinAnnotationView(GamePlay gamePlay)
{
this.gamePlay = gamePlay;
}
public void TouchesBegan()
{
this.gamePlay.CheckAnswer();
}
}
当您MyPinAnnotationView
从实例化时GamePlay
,只需执行以下操作:
MyPinAnnotation annotation = new MyPinAnnotation(this);
如果您要访问的方法不是静态的,那么您将需要对父对象的引用(我通常将父对象引用作为构造函数参数传入)才能访问其方法。毕竟,您的子类需要知道它与父类的哪个实例相关。
简单/快速的方法是在子对象中保留对父类的引用,CheckAnswer()
公开,然后在需要时很容易调用该方法......但您可能需要返回并查看设计以确保这一点是合适的。
嵌套类只能由父类使用(参见这篇文章)。除非有非常好的理由,否则它们不应该对其他班级公开可见。没有。
我建议重构这个。尝试将所有 API for 移动GamePlay
到GamePlay
类中。换句话说,TouchesBegan()
应该在GamePlay
类上调用,然后再调用到MyPinAnnotations
类中。
没有其他人应该知道MyPinAnnotations
类 - 如果他们需要,那么它表明设计失败。