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^
'PROGRAMMING CODE > SWIFT' 카테고리의 다른 글
[UIkit] selector, 함수 전달할 때 @objc를 붙이는 이유 (0) | 2023.11.20 |
---|---|
[UIkit] 애니메이션 추가 (1) | 2023.11.20 |
[Xcode] code snippet 자동완성 설정하기 (0) | 2023.11.19 |
[UIkit] Unable to activate constraint with anchors 오류 (0) | 2023.11.19 |
[UIkit] button, sender title - nil value (0) | 2023.11.07 |