셀렉터 #selector()

썹스·2023년 1월 10일
0

📌 셀렉터 #selector()

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()의 필요성과 활용성을 느낄 순 없습니다.

🤔 그렇다면 클래스의 메서드를 가리켜서 뭐에 사용할까??


📌 addTarget( ) 메서드

#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("버튼이 눌렸습니다.")
    }
profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글