야구게임만들기 과제를 하다가 게임 중 포기(?)를 하고 다시 메뉴로 넘어가기 위한 기능을 구현하는 와중에 문제가 발생하였다.
야구게임만들기 과제를 하다가 두 클래스 간의 함수를 서로 호출 하고 싶어서 상속을 하여
super
를 사용하였더니 아래와 같은 에러가 발생하였다.
class BaseballGame: Main{
func start()
while
......
}
class Main{
func start()
while
.......
}
뭔가 계속 돌고 도는 느낌으로 에러가 발생한 느낌이 들었다.
그래서 방법을 찾아보니 두 가지 정도의 방법이 있었다.
클로저
를 사용하는 방법Delegate
를 사용하는 방법클로저 캡쳐를 사용하여...?
참조 -> https://wody.tistory.com/8
BaseballGame
클래스에cancelGameHandler
를 반환 값이 없이 클로저로 선언해주고 호출해 주었다.
Main
클래스의start()
함수를 클로저에게 할당해주었다(?)
강한 참조에 의한 순환을 막기 위해[weak self]
를 사용하였다(?)
원하는대로 잘 된 것을 알 수 있다....
예제:
delegate
를 사용해 위임(?)을 해줬다.
Main
클래스를BaseballGame
클래스에게 위임(?)
BaseballGame
클래스(위임 받는 클래스?)에서 프로토콜로 정의
delegate
인스턴스 생성
BaseballGame
클래스에서Main
클래스의start()
함수 실행
똑같이 잘 구현되었다.