#selector 와 Selector()

일반적인 뷰에 터치 이벤트를 넣으려고 UITapGestureRecognizer를 검색하다가 selector에 대해 궁금한게 생겨 글 남깁니다.

notification center로 함수를 실행할때

NotificationCenter.default.addObserver(self, selector: #selector(myFunc), name: NSNotification.Name(rawValue: "~~~"), object: nil)

이런식으로 하고 함수 정의는

@objc func myFunc() { ~~~ }

이런식으로 하길래 #selector로 함수를 지정하려면 @objc를 해야만하는구나 라고 생각하고있었는데

탭제스쳐에 관한 내용을 검색하니 사람들이 올린 글마다 셀렉터가 다르게 생겼더라고요,

UITapGestureRecognizer(target:self, action: ??????)

이런 거에서 Selector("imageTapped:") 이런 거도 있고 #selector로 한거도있고 #selector() 도 있고,
함수도 @objc 있는거 없는거 종류별로 다 있어서 이거저거 경우의수 다 해봐도 계속 에러났습니다 ㅠㅠ
한참 돌아 답을 찾긴했는데
(제 경우에는 위에 노티피케이션센터 한거랑 똑같이한 게 에러가 안 납니다)

왜 다른 건 에러가 났는지, 이게 맞는 거긴 한지?
스위프트 옛날버전인거 같기도한데 검색했을 때 꽤 최근 글에도 다 다르게 적혀있어
뭐가 맞는지 궁금해 글 적습니다,

좋아요 1

초기 Swift 에서는 @selector, Selector 를 사용했고, 지금의 #selector, @objc 를 사용하도록 한게 아마도 swift3?? 정도일거에요(이거는 확실하지 않네요).

초기 Selector는 Selector(“function:arg:”)처럼 문자열을 사용했기 때문에 Xcode가 컴파일 타임에 에러 처리를 못해줬었죠.

좋아요 1