일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- swift haptic
- 스위프트
- 아이폰
- indicator style
- git
- IOS
- graceful termination
- 우아한 앱종료
- 레이아웃 사이클
- FeedbackGenerator
- without Storyboard
- refreshControl
- 런치 스크린
- viewcontroller
- 스토리보드
- do try catch
- 세븐모바일
- loadView
- scroll indicator
- exit()
- 뷰컨
- viewDidDisappear
- 알뜰폰
- 클로저
- SWIFT
- viewWillDisappear
- 스크롤 인디케이터
- viewDidAppear
- 이니셜라이저
- 깃헙
- Today
- Total
목록전체 글 (20)
예거's Bicycle for the mind
1️⃣ 혹시 레포에 .gitignore 파일이 없다면? 깃헙에서 레포를 처음 만들 때 "Add .gitignore" 에 체크하고, template 로 Swift 를 선택했다면 문제가 없다. 아래 캡처를 보면, 기본적으로 만들어지는 .gitignore 파일 내부에 "xcuserdata/" 가 포함되어 있기 때문이다. 하지만 혹시나, 깃헙 레포를 만들 때 .gitignore 를 빼먹었다면? 🤔 그래서 UserInterfaceState.xcuserstate 파일 같이 뭔지 모를 파일이 자꾸 터미널에서 Tracking 따라다니며 괴롭힌다면...? https://www.toptal.com/developers/gitignore gitignore.io Create useful .gitignore files for y..
직전 글에서 UIView 를 다뤘으니, 이번 글에선 UIViewController 의 이니셜라이저에 대해 공부해보려고 합니다. UIViewController 클래스가 가진 2개의 이니셜라이저에 대해 알아보자 애플이 만들어둔 UIKit 내의 UIViewController 클래스 정의부에서 이니셜라이저와 생명주기 관련 메서드만 요약해봤어요. open class UIViewController: UIResponder, NSCoding, UIAppearanceContainer, UITraitEnvironment, UIContentContainer, UIFocusEnvironment { public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle..
앱은 하나 이상의 화면으로 이루어져 있습니다. 화면에서 다른 화면으로 이동할 수 있고, 또 되돌아올 수도 있어요. View controllers are the foundation of your app’s internal structure. Every app has at least one view controller, and most apps have several. 앱의 모든 화면은 각자의 ViewController(이하 "뷰컨"), 그리고 생명주기(Life Cycle)를 갖습니다. 화면이 메모리에 처음 올라가고(로딩), 사용자에게 시각적으로 보여지고, 그리고 다음 화면을 위해 자리를 양보하며 사라지고, 메모리에서 아예 해제되기도 하는 일련의 과정을 UIViewController Life Cycle 이라..
스위프트의 사용자 정의 타입으로는, 구조체(struct)와 클래스(class), 열거형(enum) 등이 있다. 이번 글에서는 구조체와 클래스의 공통점과 차이점에 대해 정리하고, 어떤 기준으로 둘 중에 하나를 선택해야 하는지 정리해보자! 구조체와 클래스의 공통점과 차이점 - 타입/인스턴스 프로퍼티를 가질 수 있다. - 타입/인스턴스 메서드를 가질 수 있다. - 서브스크립트 문법(subscript syntax)을 사용하여 값에 접근할 수 있다. - 초기화 상태(initial state)를 만들기 위한 이니셜라이저를 정의할 수 있다. - 기능적 확장이 가능하다. - 프로토콜을 준수할 수 있다. 여기서, 클래스는 구조체가 가지고 있지 않은 별도의 능력이 있다. - 클래스의 단일 상속이 가능하다. (구조체는 상속..
네임스페이스(NameSpace) 란? 네임스페이스는 연관된 값들을 한 공간에 이름을 지어 모아둔 공간을 말한다. 쉽게 예를 들면, 우리가 '서랍'에 물건을 보관할 때, 그 안에 뭐가 들었는지 '라벨링'하는 것과 비슷하다. 유사한 물건들을 모아둠으로써, 관리(유지보수)가 쉬워지고 재사용도 편리해진다. 네임스페이스를 통해서만 문자열에 접근할 수 있게 만드는 캡슐화(Encapsulation) 방법이기도 하다. 코딩을 할 때도 이런 네임스페이스를 잘 만들어두면, 하드코딩도 방지하고 코드 가독성도 좋아진다. 이번 글에서는, 출력을 위해 사용할 문자열(String)들을 모아두는 네임스페이스를 만든다고 가정해보자. 네임스페이스를 만드는 방법을 총 6가지로 정리해보겠다. 사실, 6가지 보다 더 다양한 방법으로 네임스페..
'456억 원' 이라는 큰 숫자를 Int 타입으로 써보자. // 큰 숫자는 가독성(Readability)이 떨어진다. var bigNumber: Int = 45600000000 print(bigNumber - 10000) // 45599990000 이렇게 매우 큰 숫자는, 코드에서 가독성(Readability)이 떨어진다. 읽기가 불편하다. 시간이 조금 더 걸린다. 코드가 아니라, 일반적인 환경에서는 우린 콤마(,)를 활용해 숫자의 자릿수 구분을 할 수 있다. 456억 원은 45,600,000,000 원으로 표시할 수 있다. 하지만 코드에서는 숫자 사이에 콤마(,)를 넣을 수 없다. // 숫자 사이에 콤마(,)를 넣을 순 없다. var bigNumber: Int = 45,600,000,000 // err..
스위프트엔 고차함수(Higer-order function)라는 게 있다. 엥? 고차함수?? 고등학교 때 배웠던 2차, 3차, 4차 함수 처럼, 차수가 2 이상인 함수를 말하는 건가 싶었다. 고차함수가 왜 갑자기 스위프트에 등장하나 싶었는데, 그때의 그 그래프나 방정식을 풀기 위해서가 아니었다. 위 이미지의 고차함수들을 스위프트의 용어를 사용해서 나름대로 해석해보겠다. 먼저, y 는 리턴값으로 이해할 수 있다. 어떤 계산을 거쳐서, 최종적으로 나오는 값이니까. 그리고 x 는 파라미터로 볼 수 있다. 어떤 값을 집어넣느냐에 따라, 리턴값에 영향을 주니까. a, b, c 등의 '계수'는 constant, 즉 상수로 볼 수 있다. 스위프트에서 let 으로 선언하는 값들 말이다. 변하지 않는 숫자라고 가정한다. ..
스위프트 Array(배열)은 순서가 있는 Ordered Collection Type 이다. Array를 2중으로 만들어서 정렬(sort)을 공부해보자. 먼저, sort() 와 sorted() 정렬 메소드의 차이를 알아야 한다. sort 는 원본값에 영향을 주고 리턴값이 없다. sorted 는 원본값에 영향을 주지 않고, 새로운 리턴값을 반환한다. 즉 let 으로 선언한 배열이 있다면, sort 메소드를 사용할 수 없다. let 으로 선언한 배열은 'immutable value' 가 된다. 즉, 변경이 불가능한 값! 따라서 원본을 건드리는 sort() 메소드를 쓸 수 없다. 만약 원본이 변경되길 원하지 않는 배열이 있다면, let 으로 선언한 뒤 sorted() 메소드로 새로운 값을 만들어 쓰는 게 좋다...