Swift에서 셀렉터 #selector( )는 클래스 내부에 정의된 메서드를 가리키는 기능을 가지고 있습니다.
사용할 때는 #selector(타입.메서드)
방식으로 사용합니다.
또한 #selector()
는 Objective-C 언어에서 사용하던 문법이기 때문에 가리키려는 메서드 이름 앞에 @objc
어트리뷰트 키워드를 작성해야 합니다.
class Man{ var name: String var age: Int init(name: String, age: Int){ self.name = name self.age = age } @objc func hello(){ // 메서드를 가리키기 위해서는 @objc 어트리뷰트 키워드 작성 print("안녕") } } var kim = Man(name: "김철수", age: 25) #selector(kim.hello) // Man 클래스 내부의 hello() 메서드를 가리키는 코드 print(#selector(kim.hello)) // hello (hello는 Selector 타입입니다.)
위의 코드만을 봤을 때
#selector()
의 필요성과 활용성을 느낄 순 없습니다.🤔 그렇다면 클래스의 메서드를 가리켜서 뭐에 사용할까??
#selector()
는 addTarget()
메서드와 같이 사용하는 경우가 많습니다.
✋ 참고: addTarget( )메서드의 형태
button.addTarget(target: Any?, action: Selector, for: UIControl.Event)
button.addTarget(target: 연결할 객체, action: 연결할 메서드, for: 동작 이벤트)
🤔 addTarget( ) 메서드는 언제 사용하는 거지??
개발자가 Xcode에서 스토리보드의 오브젝트 라이브러리를 사용하지 않고 코드로 버튼(UIButton)을 만든다 가정해보자!!
스토리보드의 오브젝트 라이브러리를 사용하여 버튼을 만들 경우에는 별다른 코드 작성 없이 사용할 수 있었지만, 버튼을 코드로 작성할 경우에는 작동할 메서드를 연결해줘야 합니다.
이때 사용되는 메서드가
addTarget( )
메서드입니다.(즉,
addTarget( )
메서드는 버튼이 눌렸을 때 실행시킬 메서드를 연결해주는 메서드)
✅ addTarget( ) 메서드 예시 코드
private var testButton: UIButton = { var button = UIButton(type: .custom) button.setTitle("버튼", for: .normal) // 버튼 이름 설정 button.setTitleColor(.white, for: .normal) // 버튼 이름의 색상 설정 button.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: .light) // 버튼의 크기 // testButton 객체가 눌리면 testFunc 메서드 호출!! button.addTarget(self, action: #selector(testFunc), for: .touchUpInside) return button }() @objc func testFunc(){ print("버튼이 눌렸습니다.") }