1. 옵셔널 바인딩 guard라 하면 어떤 것이 가장 먼저 떠오르시나요? 저는 옵셔널 바인딩에서의 guard let 구문이 가장 먼저 떠오르는데요 ! ! ! 먼저 옵셔널 바인딩에서의 guard에 대해 간단하게 살펴볼게요! Optional String의 파라미터를 가지는 함수를 하나 만들었습니다. 첫 번째 이미지에서 함수를 호출하니 입력한 email을 Optional 상태로 받았습니다. 두번째 이미지에서는 guard let 구문을 통해 옵셔널 바인딩을 하여 안전하게 email을 받을 수 있었습니다. guard let 옵셔널을 벗겼을 때 nil이면 더 이상 코드를 실행시키지 않겠다는 의미가 강함 -> nil이 아닐 때만 관심을 갖겠다. 선언된 변수를 아래문장에서 사용 가능 (동일한 스코프로 취급) 이러한 특..
요즘 들어 제가 사용하는 코드들에 대한 의미를 알고 쓰는 것이 맞는지, 왜 쓰는 것인지 에 대한 의문이 듭니다.. 그 중 하나가 private 키워드인데요. 프로젝트를 진행하면서 private 키워드를 붙여서 파일 내 변수나 함수를 만들었습니다. 코드리뷰 단계에서 특히 이 부분을 유심하게 체크하기도 하고 새삼 중요하다고 생각을 했었습니다. 그러던 중 왜 써야하나? 라는 의문이 들었고 아 부분에 대해 정리를 해보려고 합니다. (private를 포함해서 접근제어자는 다양한 키워드가 있지만 포괄해서 정리를 하겠습니다.) private 비공개 접근수준은 가장 한정적인 범위이다. 비공개 접근수준으로 지정된 요소는 그 기능을 정의하고 구현한 범위 내에서만 사용할 수 있다. 비공개 접근수준으로 지정한 기능은 같은 소..
lazy 키워드를 정리하게 된 이유는 코드로 UI를 작성하면서 궁금증이 생겨서입니다. 친구와 let과 private lazy var 둘의 차이점이 무엇일까에 대해 얘기를 나눴었는데 정리하면 좋을 것 같아서 정리를 해봅니다! 우선 간단하게 터치를 할 수 있는 버튼을 만들어보겠습니당 let letButton = UIButton().then { $0.addTarget(self, action: #selector(letButton), for: .touchUpInside) } private lazy var lazyButton = UIButton().then { $0.addTarget(self, action: #selector(lazuyButton), for: .touchUpInside) } 요 둘의 차이가 가장 큰..
@main에 대해 작성하게 된 이유는 AppDelegate와 SceneDelegate의 역할과 기능을 공부하면서 궁금한 것들이 많이 생겨서 입니당 2021.09.29 - [SSAC - iOS] - [SSAC - iOS] 09월 28일 TIL [SSAC - iOS] 09월 28일 TIL 1. 앱의 구조와 동작 원리 화면 기능 데이터 데이터가 앱 내부에 저장이 되어 있을 경우 : 백업/복구 필수 (ex. 혼자 사용하는 투두, 일기, 영화 관리 앱 등) 데이터가 서버에 저장이 되어 있을 경우 seungchan.tistory.com 기존에 간단하게 포스트했었는데 다시 한 번 정리해보겠습니다. (다음 글에서는 AppDelegate와 SceneDelegate에 대해 작성해보겠습니다.) 프로젝트를 생성하면 기본적으로..
SeSAC 과제를 하다가 특정 뷰컨트롤러로 넘어갈 때 Navigation Bar가 보이지 않게끔 설정해야 할 때가 있었습니다. 들어가기에 앞서 ViewController의 생명주기에 대해 살펴 보고 넘어가겠습니다! viewDidLoad()와 viewWillAppear()를 살펴보면 viewDidLoad() 뷰계층이 최초 메모리에 로드 된 후 호출되는 메서드 메모리에 처음 로딩 될 때 1회만 호출된다. viewWillAppear() 다른 뷰에 갔다가 다시 돌아오는 상황에 해주고 싶은 처리에서 사용한다. viewDidLoad()와 구분할 것 이렇게 설명을 할 수 있습니다. 네비게이션바를 특정 뷰컨에서 없애는 것과 이게 무슨 관련이 있는데? 라고 의문이 드실텐데요. 위의 사진에서 보듯이 viewDidLoad(..
사실 이 부분을 정리하게 된 가장 큰 이유는 라벨 텍스트에 값을 받아오는 부분이 있었는데 오토레이아웃을 어떻게 잡아야 할지 생각이 많았었다. UIView 안에 라벨을 넣는데 만약 라벨이 길어지면 UIView에 보기 좋게 차지 않으니까 두 오브젝트의 우선순위를 비교해서 UIView가 늘어난다면? 이란 생각을 가지고 공부를 하게 되었다. Content Hugging priority - 최대 크기에 대한 제한 - 우선순위가 높으면 내 크기 유지. 우선순위가 낮으면 크기 늘어남 - 250단위로 사용 가능 Compression Resistance priority - 최소 크기에 대한 제한 - 우선순위가 높으면 내 크기 유지. 우선순위 낮으면 크기 작아짐 - 250단위로 사용 가능 두 오브젝트 중 하나가 커져야 하..
스토리보드에서 1. Custom Class를 지정하고, 2. Identity 에서 Storyboard ID 를 지정하였는데 이런 에러가 발생했다. 평소 에러없이 사용하던 부분에서 이런 에러가 발생해서 당황을 하고 구글링을 해보았는데 Is initial View Controller 를 체크 안해서 그렇다.. identifier 을 지정 안해줘서 그렇다 .. 의 원인을 찾을 수 있었다. 하지만 위에 나온 원인들 모두 이상없이 잘 되어 있었다... 그래서 어떻게 해결했냐면,,? 요렇게 Resource 폴더에 Constants 폴더를 생성하고 그 안에 Const.swift / Storyboard.swift / ViewController.swift를 만들어 주었다. // // Const.swift // // Cr..
상황이 .. 어떠했냐..면.. 경 ,, 작업하다가 BoostCourse_Example2 엑코 파일이 개꼬여서 지우고,, 다시 똑같은 이름으로 엑코를 만들고,, 작업하다가 시뮬레이터 & 계정 에러가 떠서 ,, 야무지게 해결하다가 탈모 올거 같아서 ,, 도저히 안돼서 얘도 지우고 BoostCourse_Week2 라는 새로운 엑코 파일을 만들어서 야무지게 작업을 해씸더 ㅋㅋ 근데 ㅋㅋ Fork 에서 커밋하고 푸쉬하려고 하니까 ,, 또 안되더라구요 ,,? 그래서 무지성으로 깃헙가서 레포지토리를 지웠더니, , 잔디밭이 ,, 야무지게 예초를 당해서 1,2,3 차 멘붕이 같이 왔어요,, 바로 구글링 해봤더니 한시간뒤에 복구 가능하다고 해서 기다리다가 복구를 해씀더 얏호 ㅋㅋ 다시 git clone ~ 해서 연결을 하..