NavigationBarButton에 Action을 추가하다가 별로 만나고 싶지 않은 @objc라는 단어를 보고야 말았다. 그래서 Selcetor는 무엇인지, @objc는 왜 붙이는지에 대해 알아보고자 포스팅을 작성한다.
특정 메서드를 컴파일할 때 동적으로 식별하고 참조하는 역할, objc에서 사용되던 기능이고, 본래 swift에선 selector가 없어도 메서드를 동적으로 식별할 수 있었기에 필요하지 않았음.
그러나 iOS 뿌리 자체가 objc에 기반하고 있기에 objc에 기반한 코드를 실행할땐 objc처럼 컴파일 해야함을 컴파일러에게 알려줘야한다. 그래서 func 앞에 @objc를 붙여야함.
자매품
일단 간단하게 기본적인 함수는 이런식으로 사용하는데,
여기서 웃긴거 발견
파라미터가 있는 경우 printTest함수에 파라미터를 정확하게 넣어주지 않았는데, sender가 practiceButton인걸 어떻게 얘가 아는건지 의문이 생겼음
오히려 정확하게 명시해주면 오류가 나버림..
G선생님의 설명에 따르면...
여기서 @objc func에 사용가능한 매개변수는 이것밖에 없다.
다시 말해서 @objc func의 매개변수는 행위의 주체인 본인(버튼, 제스쳐)만 넣을수 있고, 그래서 따로 명시 안해도 됨
그리고 이것저것 찾아보다 이런글도 발견했다. string을 파라미터로 줄 수 있는 꼼수를 발견 하신듯.
[Swift] UIButton 버튼 눌러서 함수 호출 addTarget (처음 부터 차근차근)
#selector 에 parameter 전달하기
[Swift] 셀렉터(Selector)란?
Using Objective-C Runtime Features in Swift