본문 바로가기
Swift에서 Unix Timestamp 값을 얻는 방법 스위프트로 코딩할 때 가끔 서버와의 통신 등을 이유로 유닉스 타임스탬프를 사용해야 할 때가 있습니다. 그런데 스위프트에서는 기본적으로 유닉스 타임스탬프 값을 얻는 방법을 제공하고 있지 않습니다. 따라서 이번 포스팅에서는 이를 간단하게 익스텐션으로 구현하는 방법에 대해 알아보겠습니다. 유닉스 타임스탬프(Unix Timestamp) 구현하기에 앞서 유닉스 타임스탬프에 대해 간단히 알아보겠습니다. 유닉스 타임스탬프란, 1970년 1월 1일 0시(UTC)를 기점으로 현재까지의 경과 시간을 초 단위로 환산하여 나타낸 값입니다. 예를 들어 2020년 1월 1일 0시(UTC)는 유닉스 시간으로 1577836800으로 표기합니다. 구현 방법 Date의 익스텐션에 프로퍼티 혹은 스태틱 프로퍼티를 추가함으로써 간단히 구현.. 프로그래밍 팁/Swift 2020. 11. 16.
RxSwift로 간단한 파일 다운로더 만들기 RxCocoa에는 URLSession을 리액티브하게 사용할 수 있도록 만들어 주는 익스텐션이 포함되어 있습니다. 이를테면 public func response(request: URLRequest) -> Observable라는 메소드를 사용해서 HTTPURLResponse와 Data를 리액티브하게 받는 등, 편의를 위한 메소드들이 존재합니다. 하지만 익스텐션으로 제공되는 메소드에 파일을 다운로드 받는 메소드는 존재하지 않습니다. 따라서 이번 포스팅에서는 RxSwift를 활용해서 이를 간단하게 구현해 보겠습니다. 구현 방법 우선, URLSession의 리액티브 익스텐션을 정의하고 그 안에 메소드의 파라미터와 적절한 반환형을 정의합니다. extension Reactive where Base: URLSessio.. 프로그래밍 팁/Swift 2020. 11. 15.
dequeueReusableCell을 보다 편리하게 사용하는 방법 iOS의 UICollectionView나 UITableView를 사용할 때 보통 dequeueReusableCell를 통해 셀을 재사용합니다. 그런데 이 메소드를 사용할 때마다 셀에 해당되는 identifier를 넘겨 주고 타입 캐스팅까지 해야해서 번거롭고 코드도 지저분해집니다. 따라서 이 과정을 생략할 수 있도록 extension을 정의해 보겠습니다. 구현 방법 먼저, identifier를 간편하게 사용하기 위해 UITableViewCell와 UICollectionViewCell에 대한 extension부터 정의합니다. extension UITableViewCell { static var identifier: String { return String(describing: self) } } extensi.. 프로그래밍 팁/iOS 2020. 11. 14.
UINavigationBar의 largeTitle 텍스트 속성 변경 방법 iOS 11의 내비게이션 바에 라지 타이틀이 추가됨으로써 기존의 내비게이션 바의 타이틀을 다른 방식으로 표현할 수 있게 되었습니다. 이 타이틀의 텍스트 속성을 변경하는 방법에 대해 알아보겠습니다. 스토리보드 방식 스토리보드에서 내비게이션 컨트롤러를 선택 후 내비게이션 바 영역을 선택합니다. 우측 사이드바의 [Show the Attributes Inspector] 탭에서 [Large Title Text Attributes] 섹션을 찾아 필요한 부분을 변경합니다. 위에서는 타이틀 폰트와 크기를 변경해 봤습니다. 코드 방식 해당 내비게이션 컨트롤러를 사용하고 있는 뷰 컨트롤러 등에서 속성을 지정해 줄 수 있습니다. let titleAttributes: [NSAttributedString.Key: Any] = .. 프로그래밍 팁/iOS 2020. 11. 13.
1-13. Swift - 옵셔널(Optionals) 문법 개념 정리 옵셔널(Optionals) 값이 존재하지 않을 수 있는 상황에서는 옵셔널을 사용합니다. 옵셔널은 두 가지 가능성을 내포합니다. 값이 존재하는 가능성과 존재하지 않는 가능성입니다. 값이 존재하는 경우에는 해당 값에 접근하기 위해 옵셔널을 해제할 수 있습니다. NOTE 옵셔널이라는 개념은 C 언어나 Objective-C 언어에는 존재하지 않습니다. 그나마 Objective-C 언어에서 객체 대신에 nil을 반환하는 메소드가 Swift의 옵셔널과 유사하다고 볼 수 있습니다. 여기에서 nil은 타당한 객체(valid object)가 존재하지 않는 것을 의미합니다. 하지만 Objective-C 언어의 이 nil이라는 개념은 객체에만 해당하는 개념으로 구조체(structure)나 기본적인 C 타입(basic C t.. 프로그래밍 팁/Swift 2020. 11. 11.
1-12. Swift - 튜플(Tuples) 문법 개념 정리 튜플(Tuples) 튜플은 여러 개의 값을 하나의 복합된 값으로 무리 짓습니다. 어떤 타입이든 튜플에 속할 수 있으며, 튜플 안에 속한 값들이 서로 같은 타입일 필요도 없습니다. let http404Error = (404, "Not Found") 위 코드는 다음과 같이 글로 표현할 수 있습니다. http404Error 상수에 두 개의 값으로 이루어진 튜플을 저장하고자 합니다. 이 값은 404라는 정수(Int) 값과 Not Found라는 문자열(String) 값입니다. 앞으로 자세히 설명하겠지만, 튜플은 괄호 안에 값을 가지는 형태를 가집니다. 여러 값을 가질 때는 쉼표(,)로 구분합니다. 따라서 (404, "Not Found") 튜플이 담긴 http404Error 상수는 (Int, String)로 이루어.. 프로그래밍 팁/Swift 2020. 11. 10.
1-11. Swift - 불리언(Booleans) 문법 개념 정리 불리언(Booleans) Swift에는 Bool이라는 불리언 타입(Boolean type)이 있습니다. 불리언 타입의 값은 참 또는 거짓 중 반드시 하나의 값만 가질 수 있으므로 논리 타입으로 일컬어지기도 합니다. Swift는 true와 false라는 두 개의 불리언 상수 값을 제공합니다. 참고로 변수 대신 상수입니다. let orangesAreOrange = true let turnipsAreDelicious = false 위 코드는 다음과 같이 글로 표현할 수 있습니다. orangesAreOrange 상수에 true를 저장합니다. turnipsAreDelicious 상수에 false를 저장합니다. 두 상수의 타입은 모두 불리언 타입입니다. 각각 불리언 값인 true와 false가 저장되었기 때문입니다.. 프로그래밍 팁/Swift 2020. 11. 9.
1-10. Swift - 타입 앨리어스(Type Aliases) 문법 개념 정리 타입 앨리어스(Type aliases) 타입 앨리어스는 이미 존재하는 타입을 부르는 또 다른 이름을 정의합니다. typealias 키워드로 타입 앨리어스를 정의할 수 있습니다. 타입 앨리어스를 사용하면 보다 문맥에 맞는 적절한 이름으로 이미 존재하는 타입을 참조할 수 있습니다. 이를테면 크기가 정해진 외부 데이터를 다룰 때 타입 앨리어스를 사용하여 다른 이름으로 부를 수 있습니다. 타입 앨리어스를 정의하면 기존의 이름과 마찬가지로 어디에서나 새로운 이름을 사용할 수 있습니다. typealias AudioSample = UInt16 var maxAmplitudeFound = AudioSample.min 위 코드는 다음과 같이 글로 표현할 수 있습니다. UInt16 정수 타입을 AudioSample로 부르기.. 프로그래밍 팁/Swift 2020. 11. 8.
1-9. Swift - 숫자 타입 변환(Numeric Type Conversion) 문법 개념 정리 숫자 타입 변환(Numeric type conversion) 정수형 상수나 변수를 선언하는 일반적인 경우에는 정수 타입(Int)을 사용하는 것을 권장합니다. 심지어 해당 값이 음의 정수여도 말입니다. 기본적으로 Int 타입을 사용함으로써 코드에 작성된 정수형 상수와 변수는 상호운용이 가능하게 되며, 정수 리터럴 값의 타입을 추론하는 것도 가능해집니다. 외부 소스의 데이터 크기가 분명히 정해져 있거나, 성능, 메모리 사용, 최적화 작업 등 분명한 목적이 있는 경우에만 다른 정수 타입을 사용하는 것을 권장합니다. 분명한 목적을 가지고 특정한 정수 타입을 사용함으로써 실수로 값이 초과되는 것을 막을 수 있으며, 사용되는 데이터의 특성을 암묵적으로 명시할 수 있다는 장점이 있습니다. 정수 변환(Integer c.. 프로그래밍 팁/Swift 2020. 11. 7.
1-8. Swift - 숫자 리터럴(Numeric Literals) 문법 개념 정리 숫자 리터럴(Numeric literals) 정수 리터럴(integer literal)을 10진수(decimal number)로 표현하면 접두사(prefix)가 붙지 않습니다. 정수 리터럴을 2진수(binary number)로 표현하면 접두사 0b가 붙습니다. 정수 리터럴을 8진수(octal number)로 표현하면 접두사 0o가 붙습니다. 정수 리터럴을 16진수(hexadecimal number)로 표현하면 접두사 0x가 붙습니다. let decimalInteger = 17 let binaryInteger = 0b10001 let octalInteger = 0o21 let hexadecimalInteger = 0x11 위 코드는 다음과 같이 글로 표현할 수 있습니다. 만약 17이라는 정수 리터럴을 10.. 프로그래밍 팁/Swift 2020. 11. 6.