본문 바로가기

분류 전체보기23

[Swift] 옵셔널 바인딩(Optional Binding) Optional 값이 있을 수도 있고 없을 수도 있다. Optional은 값이 대입되어 있거나, 아니면 아무런 값이 대입되지 않은 상태(nil)인 type을 말한다. String? 이라고 표현되면 해당 변수가 String을 갖고 있거나, 아무 값도 없는(nil) 상태라는 것이다. 이는 type casting이나 nil value 체크 등에 있어서 중요한 역할을 한다. Optional Unwrapping 옵셔널 값은 랩에 둘러싸여 있어 사용하기 위해서는 unwrapping 하는 과정이 필요하다. 강제 해제 (Forced Unwrapping) 아래와 같이 간단하게 !를 사용하여 forced unwrapping을 할 수 있다. 값이 있다는 것이 확실할 때 느낌표(!)를 쓰면 값을 제대로 출력할 수 있다. 하지.. 2021. 11. 24.
[iOS] 화면 터치, Return/Enter 시 키보드 내리기(Hide keyboard) 1. 화면 터치 UIViewController의 터치 관련 메소드 중에 touchesBegan 메소드가 있다. ViewController에 아래 코드를 추가하면 화면 터치 시 키보드가 내려간다. class ViewController: UIViewController { ... override func touchesBegan(_ touches: Set, with event: UIEvent?) { self.view.endEditing(true) } } 2. Return 키 화면 터치 외에도 TextField에서 입력을 완료한 후 Return 키를 눌렀을 경우 키보드가 내려가는 상황을 가장 많이 경험할 수 있다. TextField에서 키보드의 return 키를 누르면 resignFirstResponder()을 .. 2021. 11. 15.
[iOS] UISheetPresentationController로 Bottom Sheet 띄우기 UISheetPresentationController? 시트의 모양과 동작을 관리하는 프레젠테이션 컨트롤러이다. WWDC 2021에서 새로운 UISheetPresentationController를 사용하여 시트를 띄울 수 있는 방법을 제시했다. 새로운 UISheetPresentationController는 높이를 조정하고, 상단에 grabber를 추가하는 등 더욱 간단하게 구현할 수 있도록 해준다. How to use it 현재 ViewController에서 시트로 띄우고자 하는 다음 ViewController를 정의한다. class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBAction.. 2021. 11. 15.
[iOS] Custom font 적용 안 될 때 해결 방법 문제 아래처럼 extension으로 UIFont를 정의하고 View에서 사용하고자 할 때 적용이 되지 않는다. extension UIFont { enum Family: String { case Bold, Light, Medium, Regular, Thin } static func noto(size: CGFloat, family: Family) -> UIFont! { return UIFont(name: "noto_sans_cjk_kr_\(family)", size: size) } } text.font = UIFont.noto(size: 16, family: .Regular) 해결 방안 1. Font 파일 안에 적용하고자 하는 폰트를 넣고 Target Membership 체크를 했는지 확인한다. 2. inf.. 2021. 11. 15.
[iOS] TextField 첫 영문자를 소문자로 시작하기 self.textField.autocapitalizationType = .none TextField에 영문자를 입력하면 제일 첫 글자를 대문자로 자동으로 변환해서 보여준다. 이 부분을 소문자로 나오도록 하는 방법이다. 2021. 11. 15.
[Git] Git 특정 Branch Clone 하기 git으로 프로젝트 관리시 브런치의 코드를 받는다면, 기본적으로 가장 상위(master)브런치가 clone 되어 checkout을 통해 브런치를 이동하게 된다. 이 과정을 생략하고, 특정 브런치를 clone 하고자 할 때는 아래 명령어를 이용하자. $ git clone -b $ git clone -b dev https://github.com/keemdx/test.git 2021. 11. 11.
[Kotlin] Collections(List, Set, Map) Collection(콜렉션)은 대부분의 프로그래밍 언어에 있는 자료구조이다. 코틀린의 Collection(List, Set, Map)을 살펴보자. Collection Types 코틀린의 Collection은 기본적으로 Mutable(변할 수 없는)과 Immutable(불변의)을 별개로 지원한다. Mutable로 생성하면 추가, 삭제가 가능하지만, Immutable로 생성하면 수정이 불가하다. Immutable (불변) Read-Only 읽기 전용 Collection (수정, 추가, 삭제 불가) Mutable (가변) Write+Read 읽기/쓰기 Collection으로 add, put, remove 등이 가능 코틀린의 콜렉션들은 아래 그림과 같은 상속 구조 갖고 있다. List List는 데이터가 저장하.. 2021. 10. 24.
[Kotlin] 코틀린 null 처리 - Safe call, non-null, Elvis operator 코틀린에서는 자바보다 null 처리를 좀 더 명확하게 한다. 코틀린은 기본적으로 값이 notNull로 nullable 표현에만 ?가 사용된다. 따라서 NPE(NullPointerException)가 발생하는 빈도를 현저히 낮출 수 있다. Nullable types 변수 타입 옆에 물음표(?)를 붙임으로서 null이 가능한 변수임을 명시적으로 표현할 수 있다. val str: String? = null Safe call operator null을 안전하게 처리하기 위해 코틀린은 ?. 연산자를 지원한다. val str: String? = null val upperCase = str?.toUpperCase() // null ?. 연산자를 사용하면, 앞의 변수가 null이 아닐때만 오른쪽 함수가 수행되고 nul.. 2021. 10. 24.
[Android] RecyclerView DiffUtil RecyclerView에 표현할 데이터를 업데이트하기 위해 주로 notifyDataSetChanged()를 호출한다. notifyDataSetChanged() 리스트의 내용이 변경되어 notifyDataSetChanged()를 호출하면, Adapter에게 RecyclerView의 데이터가 바뀌었으니 모든 항목을 통째로 업데이트를 하라는 신호를 보낸다. 이 방법은 모든 데이터를 다시 그리기 때문에 업데이트 과정이 지연되어 UX에 영향을 미칠 가능성이 매우 크다. 우리는 리스트를 매일 보고 사용한다. 변경이 된 데이터에 대해서만 Adapter 업데이트를 할 필요가 있는데 이를 위해 고안된 것이 DiffUtil 클래스다. DiffUtil을 이용하여 데이터를 효율적으로 업데이트 할 수 있다. DiffUtil R.. 2021. 9. 16.