PageViewController 사용해보기..!! 페이지 넘기듯이 내가 원하는 뷰 컨트롤러를 제어할 수 있다. extension PageVC: UIPageViewControllerDelegate, UIPageViewControllerDataSource { // 페이지 이동할때마다 호출 func pageViewController(_ pageViewController: UIPageViewController,didFinishAnimating finished: Bool,previousViewControllers: [UIViewController],transitionCompleted completed: Bool){ guard completed else { return } currentIndex = pageVie..
전체 글
굉장할 나
1년전 rx를 사용해야만 하는 프로젝트가 있어서 그때 잠깐 공부하고, 작년 7월쯤 한번 더 공부했지만 그때는 rx를 왜 사용해야하는지, 장점을 찾아봐도 이해는 되지만 크게 와닿지 않아서 조금 공부하다가 자연스럽게 사용하지 않게 되었다. 취업준비를 하면서 기존에 만들어 배포했던 다이어리 앱 코드의 심각성을 느껴 리팩토링과 기능을 추가하는 단계에서 연습용 프로젝트로 했던것 보다 좀 더 복잡한 비동기처리를 해야할 일이 생겼는데 @escaping으로 벗어나고 중괄호 안으로 타고타고 들어가는 코드를 보니 뭔가 마음에 들지 않아 좀 더 찾아보니 이런 부분을 rx로 해결할 수 있다는 것을 알게 되었다. 그때부터 rx를 배워야겠다고 생각하고 취업을 한 후 회사 코드를 보다보니 복잡한 비동기 순서때문에 @escaping..

초기화 인스턴스를 생성해서 메모리 공간을 할당받는 것. 모든 저장 속성들은 초기화가 되어야 인스턴스 사용이 가능 (초기값이 지정되어 있어야 함) 클래스 구조체 직접 초기값 넣기 O O 생성자 사용 O O 멤버와이즈 이니셜라이저 X O Convenience init 추가적인 작업을 할 수 있도록 해주는 보조 이니셜라이저 자기 단계에 있는 지정 생성자 또는 자기 단계에 있는 다른 편의 생성자 호출 가능 지정 생성자는 상위 지정 생성자를 호출해야함 클래스에만 해당하는 기능 (상속과 관련) 지정생성자보다 적은 갯수의 파라미터로 보다 편리하게 생성하기 위한 서브(Sub)개념의 생성자 편의 생성자는 지정 생성자에 의존 및 호출(지정생성자가 저장 속성 초기화) 초기화 과정을 간편하게 제공하기 위함 실질적으로 가능한 ..

제목이.. 길다 🥲 뷰를 쌓는 방법이 크게 2가지가 있는데 push, present로 나눌 수 있다. push는 navigation controller를 감싸고 있는 뷰에서 가능하고, present는 그렇진 않지만 present위에 뷰를 push 하는건 불가능하다. push -> navigation controller로 감싼 뷰 위에만 가능 present -> 그냥 뷰 위에 가능 아무튼 이런 개념을 전제로 하면 present한 뷰 위에는 push가 불가능하지만, present한 뷰를 navigation controller로 감싸면 그 위에 push가 가능하다. 내가 궁금했던 상황은 다음과 같다 VC1에서 VC2를 Push하던 중 Navigation controller를 감싼 VC3 Present를 하여 ..

코드로 뷰를 구성한 경험은 몇번 있지만 스토리 보드로 화면을 구성하는 익숙해져서 다시 기억속에서 사라졌다 ㅠ.ㅠ 아무래도 지금 다니는 회사에서는 스토리보드로 화면을 구성하니 스토리보드는 따로 연습하지 않아도 익숙해질 수 밖에 없는 환경이기 때문에 혼자서 하는 연습 예제나 프로젝트는 코드로 구성하는 방법으로 해봐야겠다! 구성한 화면은 아래와 같다. UIViewController - UIView - UIView - UIButton 으로 구성되어 있다. 조금 더 자세히 보자면 ... 이런 계층으로 구성되어 있다. (이 기능 너무 좋다 🫶🏻) 먼저 화면을 구성하는 전체적인 틀은 다음과 같다. // 새로운 뷰 생성 let newView = UIView() // 기본 뷰에 추가 view.addSubview(newV..

AutoLayout을 공부하면서 landscape와 portrait에 따른 화면 구성 방법을 공부했다. 내가 들은 강의가 조금 옛날 강의라 Vary for Traits을 사용한 화면구성방식을 소개했는데, 내가 현재 공부하는 23년 3월 시점에는 이 기능이 없었다. 찾아보니 xcode 13 업데이트 부터 이 버튼이 사라져 다른 방법을 사용해야했다. 해결방법을 찾던 중 사람들이 추천해준 동영상을 보게 되었고, 여기서 해답을 얻을 수 있었다. 나는 첫번째 세로 화면에서는 2x2로 구성된 네모 박스를 가로 화면일때는 1x4로 나타나도록 구성하고 싶었다. (어찌됐건 가로 세로 화면 구성을 다르게 하고 싶었다!) 시작 1. 먼저 세로 화면일 때 내가 원하는 Constraints를 추가한다. 2. Constraint..

TableView나 TextField와 같은 기능을 사용할 때 가끔 tableView.delegate = self 를 적어주지 않아 동작이 안될때가 있었다. 매번 습관적으로 이 코드를 적어주었지만 왜 이걸 적어야 하는지 알아보고자 한다. 델리게이트 패턴이란? 이름 그대로 위임한다 라는 의미이다. 즉 의임자를 갖고 있는 객체가 다른 객체에게 자신의 일을 위임하는 형태의 디자인 패턴으로 객체와 객체간의 대화라고 생각할 수 있다. class ViewController: UITableViewDelegate { func tableViewFunction() { print("tableview 첫번째 함수 실행") } // 실행부 let tableView = UITableView() tableView.delegate ..

Code (코드영역) 개발자가 작성한 모든 코드가 기계어(0101…)로 변환되어 올라가 있는 공간 컴파일 타임에 결정 (코드영역의 크기, 코드가 기계어로 변환) Read-Only로 중간 코드를 바꿀 수 없음 텍스트 영역이라고도 함 프로그램이 시작하고 종료될 때 까지 메모리에 남아있음 CPU는 코드 영역에 저장된 명령어를하나씩 가져가서 처리함 Data (데이터 영역) 프로그램이 종료될 때까지 지워지지 않을 데이터 저장 (전역변수, static변수 등이 저장되어 있는 공간) 컴파일 타임에 결정 코드영역과 마찬가지로 프로그램이 시작하고 종료될 때 까지 메모리에 남아있음 Heap (힙 영역) 런타임 시점에 힙이 현재 사용하고 있는 크기가 결정됨 메모리 할당을 사용하지 않은 영역을 찾아 할당하는 방식(동적할당)이..