본문 바로가기
PROGRAMMING CODE/SWIFT

[UIkit] 'self' refers to the method 'ViewController.self', which may be unexpected (self 사용 시점)

by daye_ 2023. 11. 20.

 

textField 정의하며

addTarget설정 후 타겟의 인자로 self를 넘겨줬는데

private let nameTextField: UITextField = {
      var tf = UITextField()
       	...
            
      tf.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged)
      return tf
}()

 

 

 

아래와 같은 경고가 떴다.

(스위프트 5.6부터 뜬다고함 !)

여튼 제대로 된 사용이 아닐 수 있다며 경고

 

 

다른 블로그 참고해보니까 self의 사용시점

슈퍼의 속성과 인스턴스가 초기화 된 후부터 가능

init() {
	super.init()
    ///self 사용시점
}

 

 

 

let으로 선언하게 되면 인스턴스 초기화 전에 메모리 주소를 가지지만,

lazy var로 선언하면 호출 시점부터 주소를 가지기 때문에 순서가 보장되어 있다고 한다.

그래서 self 접근이나 addSubview 등 순서가 필요할때는 lazy var로 선언해줘야한다.!

private lazy var nameTextField: UITextField = {
      var tf = UITextField()
       	...
            
      tf.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged)
      return tf
}()

 

let에서 이렇게 바꿔주면 경고 없어짐 ^0^