반복되는 UI를 해결하기 위해서 customView를 활용하기 시작했다. 이를테면 로그인화면을 만들때 InputBox 처럼 컴포넌트를 만들어 놓고 필요한 데이터만 바꿔서 UI를 구성하고 있다.
![]() |
변경이 필요한 값을 파라미터로 받아오기 위해서 init부분에 placeHolder 관련 코드를 처리해준다.
init(frame: CGRect, placeHolder: String) {
super.init(frame: frame)
inputBox.placeholder = placeHolder
}
값을 넘겨주는 곳에서는 placeHolder 뿐아니라, frame: CGRect 도 같이 넘겨주게 되는데
두가지 작성 방법이 있다는걸 발견했다.
let passwordLine = {
let line = CustomLine(frame: CGRect(), placeHolder: "Password")
return line
}()
let loginButton = {
let button = LoginButton(frame: CGRect(x: 0, y: 0, width: 0, height: 0), titleText: "로그인")
return button
}()
frame: CGRect 는 객체의 위치와 크기를 정하는데 사용되는 개념인데, frame의 type을 CGRect로 받겠다는 의미이다. CGRect의 구성요소인 x y width height 의 값을 받아서 view의 위치를 정의한다.
이런 관점에서 봤을 때 두 코드는 같은 의미이다.
frame: CGRect()
frame: CGRect(x: 0, y: 0, width: 0, height: 0)
width: 0, height: 0 으로 표기 됬음에도 불구하고 내가 그리고자 하는 UI는 나타나고 있다. . 왜일까