์ง์ญํ๋ฉด, '๋๋ฆฌ์', '๋๋ฆฌ์ธ', '์์ํ๋ค' ๋ผ๋ ๋ป์ด๋ค.
swift์์๋ ์ด์ ๋น์ทํ ์๋ฏธ๋ก ์ฌ์ฉ๋๋๋ฐ, ์ค์ ์ฝ๋๋ก ๋ณด๋ฉด์ ์ดํดํด๋ณด์
import UIkit
class ViewController: UIViewController{
@IBOutlet weak var enteredLabel: UILabel!
@IBOutlet weak var textField: UITextField!
@IBAction func buttonClicked(_ sender: Any) {
enteredLabel.text = textField.text
}
}
์์ ์ฝ๋๋ button์ ๋๋ฅด๊ฒ ๋๋ฉด textField์ ์
๋ ฅํ ๋ฐ์ดํฐ๊ฐ label์ ํ์๋๊ฒ ํ๋ ์ฝ๋์ด๋ค.
swift๋ฅผ ์ฒ์ ๋ง๋ณด๊ฒ ๋ ๋ ๋๋ถ๋ถ @IBOutlet์ผ๋ก storyboard์ ์๋ ui์ ์ํตํ๋ค.
์ด๋ ๊ฒ ์ง์ IBOutlet์ผ๋ก ์ฐ๊ฒฐํ์ฌ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฒ ์ธ์ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ delegate ํจํด์ด๋ค.
delegate ํจํด์๋ ์ธ ๊ฐ์ง ๊ฐ๋
์ด ์กด์ฌํ๋ค.
Send (Delegate โ Receiver)
Delegate๋ Reciever๋ก๋ถํฐ Receiver์์ ์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ ๋ฐ๊ณ , ์ด๋ฅผ ์ด์ฉํ ํ๋(ex: ๋ฉ์๋ ํธ์ถ)์ ์ทจํ์ ๋ ์์ ์๋ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฒ ๋๋ค.
// protocol๋ก delegate๊ฐ ์ฌ์ฉํ ๋ฉ์๋ ๋ฑ๋ก
protocol TapDelegate: class {
func helloWorld()
}
class Receiver: TapDelegate {
let button = Delegate()
init() {
button.delegate = self // delegate์๊ฒ ์์ ์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ
}
func helloWorld() {
print("Hello World")
}
}
class Delegate {
weak var delegate: TapDelegate?
func didTapButton() {
delegate?.helloWorld() // delegate์ ๋ฑ๋ก๋ receiver ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋ ์ฌ์ฉ
}
}
์ ์ฌ์ฉํ๋๊ฐ?
์ฒซ๋ฒ์งธ๋ก ์๊ฐํ๋ @IBOutlet์ ๊ฒฝ์ฐ ์ง์ UI์ ์์๋ฅผ ์ฐ๊ฒฐํ๊ณ ํ๋ํ๋์ฉ Action์ ๋ง๋ค์ด์ผํ์ง๋ง, delegate๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์์๊ฐ ๋น์ทํ Action์ ์ทจํ ๊ฒฝ์ฐ, ๋ง๋ค์ด๋์ delegate์ ์์ ์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ delegate์์ ๊ตฌํ๋ ํ๋์ ์ทจํ๋ฉด ๋๊ธฐ๋๋ฌธ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค.
viewcontroller์์ delegate๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๊ฐ์์์ delegate ํ๋กํ ์ฝ์ ์์ ๋ฐ์ ์ฌ์ฉํ๊ฑฐ๋ ์๋ ์ฝ๋ ์ฒ๋ผ extension์ผ๋ก ๊ธฐ์กด์ ํ๋กํ ์ฝ์ ํ์ฅ์์ผ ์ฌ์ฉํ๋ค.
์ค์ ์ฝ๋)
import UIKit
class HomeViewController: UIViewController {
/// Receiver
private let tableView: UITableView = {
let tableView = UITableView()
return tableView
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(tableView)
// ์์์ ์ ์ธํ tableView๊ฐ์ฒด๋ฅผ delegate์๊ฒ ๋ณด๋ธ๋ค.
tableView.delegate = self
tableView.dataSource = self
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
tableView.frame = view.bounds
}
}
/// Delegate
// ์ด๋ ๊ฒ extension์ผ๋ก protocol์ ํ์ฅํ๊ณ ๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
extension HomeViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}