我有一个名为GamePlay的ViewController类。在GamePlay中有一个名为MyPinAnnotationView的嵌套类。当调用MyPinAnnotation的方法TouchesBegan()时,我想从父GamePlay调用方法CheckAnswer()。
我不想创建新的GamePlay实例,因为我已经设置了变量和实例。我可以通过某种方式访问父母吗? (除了事件监听器)
答案 0 :(得分:9)
嵌套类只能引用父级中的静态成员。如果要访问实例成员,则需要获取对实例的引用。最简单的方法是将它作为参数添加到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);
答案 1 :(得分:1)
如果您要访问的方法不是静态的,那么您将需要对父对象的引用(我通常将父对象引用作为构造函数参数传递)以访问其方法。毕竟,您的子类需要知道它与哪个父类实例相关。
答案 2 :(得分:1)
简单/快捷的方法是在子对象中保持对父类的引用,使CheckAnswer()
公开,然后在需要时调用方法很容易......但是你可能想要回去并检查设计以确保这是合适的。
答案 3 :(得分:0)
嵌套类只能由父类(see this post)使用。除非有充分的理由,否则不应将其他类别公开显示。没有。
我建议重构一下。尝试将GamePlay
的所有API移至GamePlay
类。换句话说,应该在TouchesBegan()
类上调用GamePlay
,然后调用MyPinAnnotations
类。
没有其他人应该知道MyPinAnnotations
课程 - 如果他们需要,那么它表明设计失败。