[iOS] Selector에 관한 고찰

유인호·2024년 1월 4일
1

iOS

목록 보기
7/56

NavigationBarButton에 Action을 추가하다가 별로 만나고 싶지 않은 @objc라는 단어를 보고야 말았다. 그래서 Selcetor는 무엇인지, @objc는 왜 붙이는지에 대해 알아보고자 포스팅을 작성한다.

#Selector란?

특정 메서드를 컴파일할 때 동적으로 식별하고 참조하는 역할, objc에서 사용되던 기능이고, 본래 swift에선 selector가 없어도 메서드를 동적으로 식별할 수 있었기에 필요하지 않았음.

그러나 iOS 뿌리 자체가 objc에 기반하고 있기에 objc에 기반한 코드를 실행할땐 objc처럼 컴파일 해야함을 컴파일러에게 알려줘야한다. 그래서 func 앞에 @objc를 붙여야함.


자매품

일단 간단하게 기본적인 함수는 이런식으로 사용하는데,

여기서 웃긴거 발견

파라미터가 있는 경우 printTest함수에 파라미터를 정확하게 넣어주지 않았는데, sender가 practiceButton인걸 어떻게 얘가 아는건지 의문이 생겼음


오히려 정확하게 명시해주면 오류가 나버림..

G선생님의 설명에 따르면...

  • @objc로 표시된 메서드는 Objective-C에서 호출할 수 있는 형태로 만들어졌으며, Objective-C의 동적 메시징 시스템과의 상호 운용성을 보장하기 위해 특정 제약을 따라야 합니다.
  • 일반적으로 @objc로 표시된 메서드에는 Objective-C가 이해할 수 있는 타입의 매개변수가 포함되어야 하며, Swift의 원시 타입들 중 Objective-C에서 사용 가능한 것들도 포함됩니다. 그 중에서도 UIButton은 Objective-C에서 사용 가능한 타입이므로, @objc func에 매개변수로 사용하기에 적합합니다.

여기서 @objc func에 사용가능한 매개변수는 이것밖에 없다.

  • UIButton
  • Gesture들

다시 말해서 @objc func의 매개변수는 행위의 주체인 본인(버튼, 제스쳐)만 넣을수 있고, 그래서 따로 명시 안해도 됨

그리고 이것저것 찾아보다 이런글도 발견했다. string을 파라미터로 줄 수 있는 꼼수를 발견 하신듯.


레퍼런스

[Swift] UIButton 버튼 눌러서 함수 호출 addTarget (처음 부터 차근차근)
#selector 에 parameter 전달하기
[Swift] 셀렉터(Selector)란?
Using Objective-C Runtime Features in Swift

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th

0개의 댓글