3주차에 접어들었습니다.
이제 본격적인 앱개발 교육이 시작됩니다.
역시 딱 한번만 만들어봐서 그런가 이전에 들었던 강의에 포함되어 있던 예제코드를 보면서 제작했습니다.
이번 목표는 코드로 작성해보기!
처음부터 폴더를 나눠서 코드를 작성하기로 했습니다.
(Models,Views,Controllers) 이렇게요!
LV.1과제의 경우 단순히 보여지는 것 view라고 생각해서 Views라는 폴더에 담았습니다.
내부에 Cocoa Touch Class의 UIview를 상속한
CalculatorView 클래스가 담겨있습니다. -> 이것도 추후에 공부해야 될꺼 같아요
이렇게 UIView를 상속한 클래스를 생성하려면 UiView에서 내려오는 생성자를 구현해줘야 합니다.
특히 상속의 경우는 필수 생성자로 init?(coder: NSCoder)을 꼭 구현해줘야 합니다.
이렇게 인스턴스를 생성하려고 하면
coder: 와 frame: 이라는 두가지 생성자가 존재합니다.
근데 이 생성자들의 정체는 뭘까요?
저도 뭐 따라친다고 작성하긴 했는데 무슨 차이가 있는지 잘 모르겠습니다.. 그래서 한번 공식문서를 봤습니다.
원래 코드로 작성시 뷰를 생성할때는 이렇게 초기값을 생성해줘야 한다고 합니다.
let view = UiView() 의 경우는 단순히 객체만 올려놓는것이고
위치 설정을 나중에 하겠다는 의미라네요.
view의 위치설정을 해주고(프레임의설정) 위치설정 값을 전달해줍니다.
위치 값은 CGRect 라는 타입으로 선언 해야 하네요.
아 그러면 제가 짠 코드가 약간은 이해가 갑니다.
setup()함수에는 CalculatorView의 배경을 까맣게 만들어 주는 설정이 있습니다.
그리고 레이블의 제약 설정이 있습니다.
저는 UIView()를 상속한 커스텀 뷰를 생성했으니 부모클래스의 생성자를 받아와야겠죠.
이 생성자에서는 super.init(frame:)을 호출해서 UIView의 기본 초기화 과정을 먼저 실행합니다.
그리고 제가 설정한 커스텀 값을 실행합니다.
UIview를 상속하면 (= 커스텀 뷰로 사용하면)
반드시 이 필수 생성자를 구현 해줘야 합니다.
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
필수 생성자기에 Xcode에서 자동으로 입력해줍니다.
이 생성자는 주로 스토리보드로 UI를 짤때 구현해서 사용한다고 합니다.
스토리보드로 짜는 UI도 결국은 내부가 코드로 되어있기 때문에
iOS가 이 파일의 정보를 디코딩해서 UIView인스턴스를 생성합니다.
서로 혼합해서 사용하는 경우가 있기때문에 반드시 구현해야하는 생성자 라고 합니다.
만약 그 디자인 파일이 잘못되면 에러메세지를 출력해 내나봐요..
하.. 잘못건들였네요... 이해하고 싶은데 공식문서로만 공부하기에는 모르는게 너무 많아서 힘들었습니다ㅠㅠ