본문 바로가기
2023년 이전/iOS

iOS에서 underscore(_) 는 무엇이고, unrecognized selector sent to instance 은 왜 발생할까?

by JeongUPark 2020. 6. 14.
반응형

iOS 개발을 인수인계 받고 열심히 개발을 하고 있을 때였습니다.

 

한 func의 이름을 매우 일반적인 이름으로 작성을 하고 테스트를 해보았는데, 제가 작성한 func 쪽에서 자꾸

unrecognized selector sent to instance 이 발생하는 현상이 일어 났습니다.

 

왜 그런가 Code도 살펴보고 데이터도 확인을 해봤지만 문제가 없어서, 문제가 무엇인지 고민을 계속 하였습니다.

그래서 머가 문제일까 고민하다 아  underscore가 문제일까? 해서 underscore를 지우고 동작을 시켜보니 정상동작을 하였습니다.

 

그럼 무엇이 문제였는지 확인전에 underscore가 무엇인지 알아보겠습니다.

 

swift에서 함수를 만들때 다음과 같이 만듭니다.

func greet(person: String, day: String) -> String {
 return “Hello \(person), today is \(day).”
}
greet(person: “Bob”, day: “Tuesday”)

func greet(name person: String, _ day: String) -> String {
 return “Hello \(person), today is \(day).”
}
greet(name: “John”, “Wednesday”)

위의 첫번째 greet는 일반적인 방식으로 함수를 사용할 때 전달받는 인자앞에 라벨이 있어야 합니다. 그래서 greet(person: “Bob”, day: “Tuesday”) 이렇게 사용하여 함수를 호출합니다. 그리고 두번째 greet에서 name은 person에 대한 라벨을 새로 정의한 것이고 _은 생략을 말합니다. 그래서 두번째 greet는 greet(name: “John”, “Wednesday”)이렇게 호출 할 수 있는 것 입니다.

즉, underscore는 함수 사용시 라벨을 생략 할 수 있게 해줍니다.

 

그래서 저는 nextButton의 값을 설정하는 함수 underscore를 사용하여 만들고 호출을 하였는데,

 func setNextButton(_ state : Bool){
    ...
 }
 
 
self.setNextButton(true)

unrecognized selector sent to instance 이 발생하였습니다.

그래서 unrecognized selector sent to instance가 왜 발생하는지 알아보니 연결된 변수 명이나 바뀐 변수명의 문제가 있다고 하는데 아무튼 변수명이나 변수 관련된 오류인 것으로 판결이 났습니다.

 

그래서 함수명를

func setNextButton(_ state : Bool, type : Type){
  ...
}

이렇게 변경해주니 제대로 인식되고 동작하였습니다. 하지만 옆에 type은 쓰지 않는 값이 그냥 다음과 같이

func setNextButton(state : Bool){
  ...
}

변수가 1개일 경우에는 underscore를 사용하지 않는것이 좋을 것 같습니다.

반응형