์ฐธ๊ณ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์๋ค.
delegate๋ protocol๋ก ๊ตฌํ๋๊ธฐ์ protocol์ ์ดํด๋ณธ๋ค.
protocol์ ๋ถ์ด๋นต ๊ธฐ๊ณ๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค. ๋ถ์ด๋นต ๊ธฐ๊ณ์๋ ํ, ๋ฐ์ฃฝ, ๋ถ, ์ตํ๋ ํ์ ๋ฑ์ด ์๋ค. ๋ถ์ด๋นต์๋ ํฅ, ์ํฌ๋ฆผ, ๊ณ ๊ตฌ๋ง ๋ฑ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์๋ค. ๋ถ์ด๋นต์ ๋ถ์ด๋นต ๊ธฐ๊ณ๋ฅผ ๋ฌด์กฐ๊ฑด ๊ฐ์ ธ์ผ ์์ฑ๋๋ค.
๋ถ์ด๋นต ๊ธฐ๊ณ๋ฅผ protocol์ด๋ผ๊ณ ๋ณธ๋ค๋ฉด, ๋ถ์ด๋นต ๊ธฐ๊ณ๋ฅผ ์ฑํํ ๋ถ์ด๋นต๋ค์ ํ, ๋ฐ์ฃฝ, ๋ถ, ์ตํ๋ ํ์๋ฅผ ๊ตฌํํด์ผ ํ๋ฉฐ ๊ฐ๊ฐ ๋ค๋ฅธ ํ, ๋ฐ์ฃฝ ๋ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋์ protocol์๋ ๊ธฐ๋ฅ์ ์ ๋ถ ๊ตฌํํ๋ ๊ฒ์ด ์๋๋ผ, ์ ์ธ๋ง ํ๋ค.
delegate๋ ์์ด๋ก ๋๋ฆฌ์๋ฅผ ์๋ฏธํ๋ค. ์๋ฐ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์๋ฐ์์ ๋ฉ๋ด์ผ๋๋ก ์ผ์ ์ฒ๋ฆฌํ๋ค.
์ ๋ฆฌํ์๋ฉด, protocol์ ๋ถ์ด๋นต์ ์์ฑํ๊ธฐ ์ํ ๋ฉ๋ด์ผ์ด๋ผ๋ฉด, delegate๋ ๋ถ์ด๋นต์ ์์ฑํ๋ ์๋ฅด๋ฐ์ดํธ์์ ์๋ฏธํ๋ค.
์ธํ์ฐฝ์ HomeController์ ์ถ๊ฐํ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์์ ์ธํ์ฐฝ์ ํญํ์ ๊ฒฝ์ฐ์, ํจ์๋ฅผ ์คํํ๋ ค๊ณ ํ๋ค.
์ธํ์ฐฝ์ ๋ถ์ด๋นต์ด๊ณ , ๋ทฐ๋ ์๋ฐ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค.
์ธํ์ฐฝ์์ ํญ์ด ๋์์ ๋ ์คํ๋๋ presentLocationInputView ํจ์๋ฅผ ์ ์ธ๋ง ํ๊ณ ์ด ํจ์๋ฅผ ๋ทฐ์์ ๊ตฌํํ๋ค.
์ธํ์ฐฝ์ protocol๋ก delegate๋ฅผ ์ ์ํ์๋ค. ๊ทธ ํ presentLocationInputView ํจ์๋ฅผ ์ ์ธํ์๋ค.
protocol LocationInputActivationViewDelegate: AnyObject {
func presentLocationInputView()
}
class LocationInputActivationView: UIView {
weak var delegate: LocationInputActivationViewDelegate?
์ธํ์ฐฝ์์ ํญ ์ ์ค์ฒ๋ฅผ ์ ์ํ์๊ณ , ํญ์ด ๋์์ ๊ฒฝ์ฐ์๋ presentLocationInputView ํจ์๊ฐ ์คํ๋๋๋ก ํ์๋ค. ์ด ํจ์๋ delegate์์ ๊ตฌํ๋ presentLocationInputViewํจ์์ด๋ค.
private func configureTapGesture() {
let tap = UITapGestureRecognizer(target: self, action: #selector(presentLocationInputView))
addGestureRecognizer(tap)
}
@objc func presentLocationInputView() {
delegate.presentLocationInputView()
}
}
ํ์์ ์ธํ๋ทฐ์ delegate๋ฅผ ์๊ธฐ ์์ ์ผ๋ก ์ค์ ํ์๊ณ ํ๋กํ ์ฝ์ ์ฑํํ๋ค. ๊ทธ๋ฆฌ๊ณ presentLocationInputView ํจ์๋ฅผ ๊ตฌํํ๋ค.
class HomeController: UIViewController {
override func viewDidLoad() {
configureInputActivationView()
}
private func configureInputActivationView() {
inputActivationView.delegate = self
}
...
}
extension HomeController: LocationInputActivationViewDelegate {
func presentLocationInputView() {
print("presentLocationInputView")
}
}
์ฐธ๊ณ ์ฌ์ดํธ์์ ์ฝ๊ณ ์น์ ํ๊ฒ ์ค๋ช ํด์ฃผ์ ์ delegate์ ๋ํด ์ดํดํ ์ ์์ด ์ ๋ง ๊ฐ์ฌํ๋ค. ๊ทธ ํ ์ค์ ๋์ ์ฝ๋๋ก ์ ์ฉํ ์ ์์๋ค. ๊ณง ๋ถ์ด๋นต ์ฒ ์ธ๋ฐ ๋ถ์ด๋นต ๋จน๊ณ ์ถ๋ค๐คค