Selector
Selector
๐ก ์์ฑ์ ์ ๊ทผํ๊ฑฐ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ๋ฆฌํค๋ ์ญํ ๋ง ํ๋ค. ์ฝ๋ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌ์ผ์, ์ฐ๊ฒฐ์ํค๋ ๊ธฐ์ ์ด๋ค.
ํด๋ก์ ์ ์ ์ฌํ๋ค.
๋ค๋ง, ํธ์ถ์ ํ ์ ์๊ณ , ํน์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํด์ฃผ๋ ์ญํ ์ด๋ค.
๋ฉ์๋ ์ฃผ์๋ฅผ ํตํด ๋ฉ์๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๋งค๊ฐ๋ณ์์ ๋ฉ์๋์ ์ด๋ฆ์ด ๋ค์ด๊ฐ๋ค. (์ฃผ์)
๋ด๋ถ์ ์ผ๋ก Objective-C๋ก ๊ตฌํ๋์ด์๋ค.
๊ตฌ์กฐ์ฒด ํ์ ์ด๋ฏ๋ก ๊ฐ๋ฆฌํฌ ์๋ง ์๊ณ , ์คํ์ ๋ถ๊ฐ๋ฅํ๋ค.
์์
class Dog {
var num = 1.0
@objc var doubleNum: Double {
get {
return num * 2.0
}
set {
num = newValue / 2.0
}
}
@objc func run() {
print("๋ฌ๋ฆฌ๋ค")
}
}
// (๊ณ์ฐ)์์ฑ์ ๊ฐ๋ฅดํฌ๋
let eyesSelector = #selector(**getter**: Dog.doubleNum) // ๊ณ์ฐ(์ฝ๊ธฐ) ์์ฑ
let nameSelector = #selector(**setter**: Dog.doubleNum) // ๊ณ์ฐ(์ฐ๊ธฐ) ์์ฑ
// ๋ฉ์๋๋ฅผ ๊ฐ๋ฅดํฌ๋
let runSelector = #selector(Dog.run) // ํํ์ง ์์ ๊ฒฝ์ฐ
ํด๋์ค, Objective-C ํ๋กํ ์ฝ์ ํฌํจ๋ ๋ฉค๋ฒ์๋ง ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค. (๊ตฌ์กฐ์ฒด์์ ์ ์ฉ ๋ถ๊ฐ๋ฅ)
๋ด๋ถ์ ์ผ๋ก Objective C ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ @objc ํค์๋๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
์์
class ViewController: UIViewController {
lazy var myButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("MyButton", for: .normal)
button.frame = CGRect(x: 0.0, y: self.view.frame.height - 150, width: view.frame.width, height: 50.0)
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(myButton)
myButton.addTarget(self, action: **#selector(ViewController.doSomething(_:))**, for: .touchUpInside)
// myButton.addTarget(self, action: #selector(doSomething), for: .touchUpInside)
// self๋ฅผ ์์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ViewController๋ ์๋ตํ ์ ์๋ค.
}
// ์
๋ ํฐ๋ ์ค๋ธ์ ํฐ๋ธC์์ ์ธ์ํ ์ ์๋ ์์ฑ/๋ฉ์๋๋ง ๊ฐ๋ฅดํฌ ์ ์์
**@objc** func doSomething(_ sender: Any) {
}
}
addTarget
์ฝ๋๋ก ๋ฒํผ์ ๋ง๋ค์์ ๋, ์ด๋ค ํจ์๋ฅผ ์คํ์ํฌ์ง ๊ฒฐ์ ํด์ผํ๋ค.
์ฆ, ๋ฒํผ์ ๋๋ ์ ๋, ์ด๋ค ์ธ์คํด์ค๋ฅผ ์คํ์ํฌ์ง ์ ์ด์ค ๋ ์ฌ์ฉํ๋ค. ์ด๋ ๋งค๊ฐ๋ณ์์ selector๋ฅผ ํตํด ์ํํ๋ค.
Last updated