리액트와 스위프트를 비교하는 방식과 내용이 맞는지 확신은 없지만
자바스크립트 학습한 내용이 스위프트를 공부하는데 도움이 되는 부분이 많다.
그래서 자바스크립트와 스위프트의 일부 내용을 비교하면서 작성해 보았다.
자바스크립트(리액트)를 배웠다. 리액트는 라이프사이클메서드가 있다.
리액트에서 라이프사이클메서드는 Class컴포넌트 일때, ComponentDidMount / ComponentDidUpdate 등 많은 메서드가 존재 한다.
내부적으로 어떻게 구성되어 있는지 모르지만,
사용할 때는 React가 import 되었다면 추가적으로 import 같은 것 없이 사용가능하다.
componentDidMount는 첫 랜더가 끝나고 실행이되고,
ComponentDidUpdate는 다시 랜더가 되고나서 실행이 된다.
이 두개 와 마찮가지로 다른 라이프사이클 메서드도 랜더와 같은 특정한 트리거에 의해서 작동한다.
이와같이 swift에서도 예를 들어 ARKit을 import 하게 되면
ARKit 안에 있는 프로퍼티를 사용할 수 있게 되는것 같다.
어떠한 프로퍼티가 있는지 관련 내용은 APPLE ARKit Docs 에 있다.
하지만 아직은 어떠한 경우에 어떠한 프로퍼티를 가져와야 하는지 모르겠다.
아래 코드는 비슷한 delegate 예제이다.
UITextFieldDelegate 프로토콜을 상속받아서 email.delegate에 자기자신(self)인 ViewController 를 할당하면 textField관련 이벤트 함수가 생겨서 그 함수를 선언해주면 정해진 트리거에 의해서 실행되는 것 같다.
참고 : 시뮬레이터에서 키보드가 보이지 않는다면
command + k단축키로 토글할 수 있다.
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var email: UITextField!
@IBOutlet weak var pwd: UITextField!
@IBOutlet weak var output: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// 텍스트 필드의 이벤트 처리자(대리자)는 나(self)다!!
// self는 자신의 클래스를 의미 (ViewController)
// 이게 빠지면 이벤트가 생기지 않음
email.delegate = self
pwd.delegate = self
}
// 텍스트필드에 글자가 입력될 때 마다 호출 됨
func textField(_ textField: UITextField,shouldChangeCharactersIn range: NSRange, replacementString string: String)->Bool{
print(textField.text!)
return true
}
// 글자입력이 완료될 때 한번 호출됨 ( 포커스 전환됬을 때)
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
print("endediting")
return true
}
// 키보드 완료(다음, 서치) 버튼 눌렀을 때
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
print("aaa??")
return true
}
@IBAction func btn(_ sender: Any) {
print(self)
print(email.text!,pwd.text!)
output.text = "아이디: "+email.text! + ", " + "비밀번호 : " + pwd.text!
output.backgroundColor = UIColor.red
}
}