전체 글 59

[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

국내&해외 IT회사 기술블로그 모음

국내 네이버 http://d2.naver.com 카카오 http://tech.kakao.com Line https://engineering.linecorp.com/ko/blog/ 쿠팡 https://medium.com/coupang-tech 우아한형제들 https://woowabros.github.io 당근마켓 https://medium.com/n42-corp 토스 https://toss.tech/ 뱅크샐러드 https://blog.banksalad.com/tech/ 왓챠 https://medium.com/watcha/tagged/programming 해외 Netfilx https://netflixtechblog.com Twitter https://blog.twitter.com/engineering/en..

꿀팁 2022.07.05

iOS 개발자에게 도움되는 사이트

안녕하세요. 하미입니다 :) 프론트엔드 개발자에서 iOS 개발자로 전향 후, 그동안 도움을 받았던 공식 문서와 블로그들을 공유하려고 합니다. 개발하면서 발견하는 좋은 공식 문서 혹은 블로그가 있다면 추후에 추가하도록 하겠습니다. 공식 문서 Swift 소개 페이지 - Apple Developer 사이트 내에서 Swift의 특징들을 소개한다. Swift - Apple Developer Swift는 iOS, macOS, tvOS 및 watchOS에서 사용할 수 있는 강력하면서도 직관적인 프로그래밍 언어입니다. Swift 코드 작성은 대화식으로 재미있고, 구문은 간결하면서도 표현력이 풍부하며, Swift에는 개 developer.apple.com Swift 언어 설명서 - Swift 프로그래밍 언어에 대한 전체..

꿀팁 2022.07.05

[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