전체 글
[IOS] UIView의 tintColor 프로퍼티에 대하여
앱의 화면에서 일관된 글자색과 배경색을 적용하기 위해 tintColor 프로퍼티를 사용하면서 공부하고 경험한 내용을 정리한 글입니다. 1. tintColor의 정의 애플의 개발자 문서에서는 다음과 같이 설명하고 있다. The first nondefault tint color value in the view’s hierarchy, ascending from and starting with the view itself. UIView의 틴트 컬러란 자기 자신의 뷰 객체부터 시작하여 뷰 계층을 따라 올라가면서 처음 만나는 default가 아닌 tintColor의 값을 리턴해주는 프로퍼티이다. tintColor는 시스템 UI가 활성화 상태일때 시각적으로 보여지며, system 타입의 UIButton에서 흔히 볼 ..
[Sesac IOS] 17일차 TIL
17일차 수업을 듣고 새로 알게된 점과 공부할 내용을 정리한 글입니다. Learned 연산 프로퍼티 (Computed Property) 저장 프로퍼티와 다르게 메모리에 공간이 할당되지 않아 값을 저장할 수 없지만 다른 프로퍼티의 값을 사용해서 계산한 결과를 제공해준다. 계산한 결과가 달라질 수 있기 때문에 연산 프로퍼티는 항상 var로 선언해야 한다. 클래스, 구조체, 열거형에서 사용할 수 있다. 접근자(getter) : 값을 계산해서 리턴하는 역할, 설정자 없이 읽기 전용으로 사용할 수 있다. 읽기 전용으로 사용할 경우 get 키워드는 생략이 가능하다. 설정자(setter) : 다른 저장 프로퍼티에 값을 저장하는 역할 설정자는 파라미터(newValue)로 전달받은 값을 계산하여 다른 저장 프로퍼티에 저..
[프로그래머스] 징검다리
https://school.programmers.co.kr/learn/courses/30/lessons/43236 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이분탐색 문제인걸 알고 풀어도 어려운 문제였다. 알고리즘을 어떻게 적용해야 할지 아이디어가 떠오르지 않아서 힌트를 찾아봤는데 힌트를 보고도 다른 부분에서 막혀서 3시간 정도를 고민하다가 정답을 참고했다. 내가 생각한 풀이 n개의 돌을 제거할때 어떤 돌을 제거하냐에 따라 거리의 최소값이 달라지므로 n개의 돌을 제거하는 모든 경우의 수를 구하는 방법을 생각했지만 제거 가능한 돌의 개수가 너무 많아서 ..
[Sesac IOS] 15일차 TIL
15일차 수업을 듣고 새로 알게된 점과 조사하고 싶은 점들을 정리한 글입니다. Learned 지연 (lazy) 저장 프로퍼티 프로퍼티를 사용하기 전엔 nil값을 갖다가 사용할때 비로소 설정한 초기값을 가지고 메모리에 올라감 따라서 값이 변하지 못하는 상수(let)로 선언하지 못함. 지연 프로퍼티를 멤버로 가지는 클래스, 구조체가 메모리에서 해제될때 함께 해제됨. 타입 프로퍼티도 lazy하게 동작하지만 앱이 종료될때 메모리에서 해제된다는 차이 존재 UIWindow 객체는 UIViewController를 투영해주는 객체 UIViewController의 title 프로퍼티는 객체가 네비게이션 바 또는 탭 바 아이템을 갖고 있을때 이 프로퍼티에 저장된 값을 해당 아이템에 할당한다. AppDelegate에서 새로..
[Sesac IOS] 13~14일차 TIL
13~14일차 수업을 듣고 새로 알게된 것과 알고 싶은 점들을 정리한 글입니다. Learned 하나의 스위프트 파일에 여러개의 클래스 정의를 선언하는 것도 가능은 하다. 스토리보드로 컬렉션 뷰를 사용할때 Size Inspector의 Estimate Size를 None으로 설정해야 코드로 설정한 셀의 사이즈가 정상적으로 적용된다. 스토리보드에서 뷰에 설정한 속성(값)들은 뷰 생명주기 중 loadView 메소드에서 호출된다. 즉, viewDidLoad가 더 나중에 호출되기 때문에 viewDidLoad에서 코드로 설정한 값이 더 우선한다. 테이블 뷰보다 컬렉션 뷰가 더 자유롭기 때문에 다양한 UI에 대응하기 편리하다. String().trimmingCharacters 메소드로 공백 제거 가능 하나의 테이블 뷰..
[Sesac IOS] 12일차 TIL
12일차 수업을 듣고 새로 알게된 점을 정리한 글입니다. Learned UITableView 셀 마다 높이를 다르게 설정하고 싶다면 heightForRowAt 메소드를 재정의해서 사용 rowHeight 프로퍼티는 모든 셀이 동일한 높이를 가지게 함. viewDidLoad 메소드보다 테이블뷰의 데이터 소스 메소드가 우선함. viewDidLoad가 먼저 호출이 되기 때문 IndexPath 구조체 타입은 ExpressibleByArrayLiteral 프로토콜을 conform 하기 때문에 indexPath == [0, 0] 같은 표현이 가능하다. CaseIterable 프로토콜 : 열거형의 모든 값들을 모아놓은 배열을 제공해주는 프로토콜 allCases라는 타입 프로퍼티로 배열에 접근할 수 있다. StoryBo..
[Sesac IOS] 11일차 TIL
11일차 수업을 듣고 새로 알게된 점을 정리한 글입니다. Learned 프로젝트 오류 생기면 Identity Inspecter에 inherit module이 체크 돼있는지 확인 클래스, 구조체 등의 인스턴스 생성은 타입의 이름 뒤에 .init()이 생략된 형태 UIView() == UIView.init() UITableViewController는 루트 뷰가 테이블뷰이기 때문에 테이블뷰가 화면 전체를 차지하고 Delegate와 DataSource가 기본적으로 등록돼있다. 테이블뷰의 콘텐츠 Static Cell : Cell이나 Section의 개수같은 테이블뷰 내부 요소(컨텐츠)가 변하지 않고 고정 ex) ios 설정 앱, 카카오톡 환경설정 화면 Dynamic Prototypes : 데이터에 따라 내부 요소..
[IOS] UserDefault 사용해보기
간단한 예제를 통해 UserDefault를 사용해보고 작성한 코드를 리뷰하는 글입니다. 1. UserDefault란 앱에 대한 사용자의 데이터를 저장하는 애플의 기본 저장소 앱 마다 존재하며 샌드박스 시스템에 의해 관리됨 주로 푸쉬 알람 허용과 같은 사용자의 환경설정 값 등 가벼운 데이터가 저장됨 key-value 쌍의 형태로 데이터가 저장됨 2. 예제 1) 감정 다이어리 9가지 감정을 열거형 case로 정의 열거형의 rawValue를 UserDefault의 key로 사용 화면 로딩 시 감정별로 저장된 value를 읽어서 각 버튼의 타이틀에 보여줌 버튼 터치 시 value+1 을 새로운 값으로 저장하고 버튼 타이틀을 변경 @IBAction func touchButton(_ sender: UIButton..
[IOS] 열거형을 사용해서 간단한 앱 만들어보기
텍스트필드에 단어를 입력하면 단어의 뜻을 보여주는 간단한 앱을 만들면서 작성한 코드를 리뷰하는 글입니다. 1. 레이아웃 검색창(텍스트필드) 높이 = 루트뷰의 0.06배 검색 버튼 아이콘 (돋보기) 크기 SymbolConfiguration large로 설정 검색 창 아래 4개의 해시태그 버튼 각각의 Content Inset을 상하좌우 5 만큼 설정 → default 스타일의 버튼은 내부 글자 사이 여백이 좁아서 답답해보이기 때문에 가장 오른쪽 버튼의 trailing constraint를 최소 20으로 설정 → 버튼의 텍스트가 길어져도 최소한 루트뷰의 trailing보다 20만큼의 간격을 유지 컨테이너 뷰 생성해서 루트뷰 중앙에 위치시키고 좌우 20의 간격 설정, 컨테이너 뷰 높이 = 루트뷰의 0.4배 → ..
[IOS] AutoLayout으로 현업의 서비스 화면 구성하기
오토 레이아웃을 통해 현 서비스의 앱 화면을 만들면서 작성한 코드를 리뷰하는 글입니다. 1. 주문하기 화면 탭바의 첫번째 네비게이션 컨트롤러 배너 높이를 루트 뷰 높이의 0.2배로 설정 음식 카테고리 버튼들을 레이아웃 하기위해 1개의 수직 스택뷰와 4개의 수평 스택뷰 사용 수직 스택뷰 상하좌우에 20의 간격을 주어 수직 스택뷰의 너비와 높이 결정 수평 스택뷰의 높이를 결정하기 위해 수직 스택뷰 distribution을 fill equally 설정 하나의 수평 스택뷰에 4개의 서브뷰(어레인지뷰)가 들어감. 수평 스택뷰 distribution을 fill equally로 설정해서 각 서브뷰의 너비 결정 수평 스택뷰의 서브뷰들 간의 공간은 (spacing) 20 서브뷰(음식 카테고리) 하나의 높이와 너비가 결정..