Swift & iOS 21

[iOS] 앱 버전(App Version) 확인하기

안녕하세요. 하미입니다. :) Swift 코드로 앱 버전 확인하는 방법을 알아보겠습니다. 아래와 같이 코드를 작성하면 앱 버전을 정의할 수 있습니다. var appVersion: String? { guard let dictionary = Bundle.main.infoDictionary, let version = dictionary["CFBundleShortVersionString"] as? String else { return nil } return version } CFBundleShortVersionString에 접근하여 앱 버전을 가져왔습니다. 이때, Info.plist에 Bundle version string (short) 가 정의되어 있어야 하는데요. 1.0.0과 같이 상수로 정의해줄 수도 있지..

Swift & iOS 2022.07.29

[Swift] 고차함수 (map, filter, reduce)

고차함수란? 다른 함수를 전달 인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수 map 컨테이너 내부의 기존 데이터를 변형하여, 새로운 컨테이너를 생성하는 함수이다. let numbers = [0,1,2,3] let mapArray = numbers.map { (number) -> Int in return number * 2 } print("map \(mapArray)")// map [0, 2, 4, 6] filter 컨테이너 내부의 값을 걸러서, 새로운 컨테이너로 추출하는 함수이다. let intArray = [10,5,20,13,4] let filterArray = intArray.filter { $0 > 5 } print("filter \(filterArray)")// filter [10, 2..

Swift & iOS 2022.06.22

[Swift] 클로저 (Closure)

클로저란? 코드에서 전달 및 사용할 수 있는 독립 기능 블록이며, 일급 객체의 역할을 할 수 있다. 참조 타입 이름 없는 함수, 익명 함수로 지칭한다. 즉, 클로저는 Named Closure, Unnamed Closure 모두 포함하지만, 보통 Unnamed Closure를 말한다. 함수는 클로저의 한 형태로, Named Closure(이름이 있는 클로저)이다. 일급 객체가 궁금하다면 아래 더보기 클릭 ! 더보기 일급 객체: 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환 값이 될 수도 있다. 클로저 문법 (head & body) { (매개 변수) -> 리턴 타입 in 실행 구문 } 클로저에서는 전달 인자 레이블을 사용하지 않는다. 클로저 예시 1. 파라미터와 리..

Swift & iOS 2022.06.22

[Swift] try-catch (에러 처리)

에러 처리란? 프로그램 내에서 에러가 발생한 상황에 대해 대응하고 이를 복구하는 과정 스위프트에서 런타임에 에러가 발생한 경우 이를 처리하기 위한 발생(throwing), 감지(catching), 전파(propagating), 조작(manipulating)을 지원하는 일급 클래스를 지원한다. 스위프트에서 에러는 에러 프로토콜을 따르는 타입의 값으로 표현된다. 에러 프로토콜은 요구 사항이 없는 빈 프로토콜이지만 오류를 표현하기 위해서는 이 프로토콜을 채택해야 한다. 오류의 종류는 열거형으로 표현하는 것이 일반적이다. 오류를 처리하는 4가지 방법 1. 함수에서 발생한 오류를 해당 함수를 호출한 코드에 전파하는 방법 enum PhoneError: Error { case unknonwn case batteryL..

Swift & iOS 2022.06.22

[Swift] 옵셔널 체이닝이란?

옵셔널 체이닝이란? 옵셔널에 속해 있는 nil 일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정 ?: 접근한 프로퍼티에 값은 nil이 될 수 있어서 항상 옵셔널에 감싸져 있다. !: 옵셔널 프로퍼티를 강제 언래핑하여 접근하기 때문에 값이 옵셔널에 감싸져 있지 않다. 옵셔널 체이닝 예시 struct Developer { let name: String } struct University { let name: String var developer: Developer? } var developer = Developer(name: "hammii") var university = University(name: "Gachon", developer: developer..

Swift & iOS 2022.06.22

[Swift] 열거형 (Enum)

열거형이란? 연관성이 있는 값들을 모아놓은 것 하나의 새로운 타입처럼 사용할 수 있다. (대문자로 시작해야 함) 열거형 예시 enum CompassPoint: String { case north = "북" case south = "남" case east = "동" case west = "서" } var direction = CompassPoint.east direction = .west // 컴파일러가 direction 변수는 CompassPoint 타입이라는 것을 추론하기 때문에 열거형 이름을 생략하고 .내부항목 으로도 사용 가능 switch direction { case .north: print(direction.rawValue) case .south: print(direction.rawValue) ..

Swift & iOS 2022.06.16

[Swift] 익스텐션 (Extensions)

익스텐션이란? 기존의 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가하는 기능 주로 외부에서 가져온 타입에 내가 원하는 기능을 추가하고자 할 때 익스텐션을 사용한다. 익스텐션은 모든 타입에 적용할 수 있다. 새로운 기능을 추가할 순 있지만 기존의 기능을 재정의(오버라이드) 할 순 없다. 익스텐션이 타입에 추가할 수 있는 기능 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브 스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 /* extention SomeType { 추가 기능 } */ extension Int { var isEven: Bool { return self % 2 == 0 } var isOdd: Bool { return se..

Swift & iOS 2022.06.16

[Swift] 프로토콜 (Protocol)

프로토콜이란? 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진 구조체, 클래스, 열거형은 프로토콜을 채택해서 특정 기능을 실행하기위한 프로토콜의 요구사항을 실제로 구현할 수 있다. 만약 프로토콜이 요구하는 상황을 모두 충족하면 해당 타입이 채택한 프로토콜을 준수한다고 말할 수 있다. 여러개의 프로토콜을 채택할 수 있다. 클래스도 프로토콜 채택 가능, 상속받은 클래스가 있다면 슈퍼클래스 제일 먼저 쓰고 그 다음 프로토콜을 쓴다. /* protocol 이름 { } */ protocol SomeProtocol { } protocol SomeProtocol2 { } struct SomeStructure: SomeProtocol, SomeProtocol2 { } 프로퍼티 요구사항 자신을 채택..

Swift & iOS 2022.06.16

[Swift] assert와 guard

1. assert 특정 조건을 체크하고, 조건이 성립되지 않으면 메세지를 출력하게 할 수 있는 함수 assert 함수는 디버깅 모드에서만 동작하고 주로 디버깅 중 조건의 검증을 위하여 사용한다. var value = 0 assert(value == 0) value = 2 assert(value == 0, "값이 0이 아닙니다") 2. guard 뭔가를 검사하여 그 다음에 오는 코드를 실행할지 말지 결정하는 것 guard 문에 주어진 조건문이 거짓일 때 구문이 실행된다. guard 조건 else { // 조건이 false 면 else 구문이 실행된다. // return, throw, break를 통해 이 후 코드를 실행하지 않도록 한다. } func guardTest(value: Int?) { guard ..

Swift & iOS 2022.06.16

[Swift] 타입 캐스팅 (is, as)

타입 캐스팅이란? 인스턴스의 타입을 확인하거나 어떠한 클래스의 인스턴스를 해당 클래스 계층 구조의 슈퍼 클래스나 서브 클래스로 취급하는 방법 1. is 인스턴스의 타입을 확인한다. 2. as as? 조건부 형식 다운 캐스팅하려는 옵셔널 값으로 반환 as! 강제 형식 강제로 언래핑하여 값을 반환 따라서 반드시 성공할 것이라는 확신이 들 때만 사용해야 한다 3. is와 as의 예시 MediaItem을 정의하고 이를 상속받는 Movie, Song 클래스를 정의한다. 그 후 library 변수에 Movie와 Song 들을 넣어준다. class MediaItem { var name: String init(name: String) { self.name = name } } class Movie: MediaItem {..

Swift & iOS 2022.06.15