일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- github
- view
- darkmode
- 개발자
- error
- IOS
- mac
- SwiftUI
- 한글
- Session
- FLUTTER
- 이미지
- rxswift
- Archive
- geofencing
- Realm
- Notification
- JPA
- 웹뷰
- Swift
- iOS16
- Code
- window
- appstore
- Firebase
- Apple
- Git
- Xcode
- MacOS
- UIButton
- Today
- Total
목록iOS, Swift/Swift Theory (19)
EEYatHo 앱 깎는 이야기
고차함수 ( Higher-order function ) 함수(클로저)를 파라미터로 받거나, 함수를 리턴하는 함수 Swift에서 제공하는 고차함수를 셀수도 없이 많다. 자주 사용하는 순으로 정리한다. map filter reduce forEach compactMap flatMap map Array에서 모든 값들에게 같은 연산을 적용한 새로운 Array를 만든다. let cast = ["Vivien", "Marlon", "Kim", "Karl"] let lowercaseNames = cast.map { $0.lowercased() } // ["vivien", "marlon", "kim", "karl"] let letterCounts = cast.map { $0.count } // [6, 6, 3, 4] fi..
유니코드로 한글을 표현하는 2가지 방법 1. 완성형 (precomposed) 초성,중성,종성 3개를 조합해서 한 글자를 표현 ex. 단 = ㄷ + ㅏ + ㄴ // "\u{1103}\u{1161}\u{11AB}" 2. 조합형 (decomposed) 유니코드에 등록된 모든 한글 중, 1개를 골라서 사용 ex. 단 = 단 // "\u{B2E8}" 확인하는 방법 : .unicodeScalars print("단".unicodeScalars) // 완성형 // - 0 : "\u{B2E8}" 단 // 조합형 // - 0 : "\u{1103}" ㄷ // - 1 : "\u{1161}" ㅏ // - 2 : "\u{11AB}" ㄴ 조합형(decomposed)의 문제 기본적으로 스위프트에서 만들어진 문자열들은 완성형으로 되어..
UserDefaults 속성 목록 데이터들만 넣을 수 있다. ( NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary ) .plist(property list) 파일 형태로 저장되기 때문이다. 앱 내의 Library/Preferences 폴더에 저장된다. 사용자 정의 개체는 Encoding을 통해 NSData로 전환하여 넣을 수 있다. 큰 데이터는 넣는 것은 좋지않다. 앱이 실행될 때 UserDefaults의 plist파일이 메모리에 한번에 load되기 때문이다. 앱 사용자가 특정 툴을 사용하는 등 UserDefaults에 쉽게 접근하고 수정할 수 있다. 따라서 인앱 구매 여부, API key 등 보안이 필요한 데이터를 넣어서는 안된다. KeyChain ..
Deferred Deeplink ( 지연된 딥링크 ) 예를 들어, 무신사(매체 앱)에서 지그재그(광고주 앱)의 특정 상품 광고를 클릭하였고, 앱스토어에서 지그재그를 설치 후 실행했더니, 광고에 나오던 상품 화면으로 바로 이동하는 것을 디퍼드 딥링크(Deferred Deeplink)라 한다. 작동 방식은 간단하다. AirBridge, OneLink 등과 같은 중간 플랫폼이 있으며, 매체 앱에서 광고를 클릭 했을 때, 미리 등록해둔 트래킹 링크를 통해 중간 플랫폼에게 디퍼드 딥링크 생성을 요청한다. 이후, 광고주 앱을 설치 후 실행했을 때, 앱에 설치해둔 중간 플랫폼의 SDK를 이용. 디퍼드 딥링크를 체크하고 내려받는다. 내려받은 디퍼드 딥링크로, 특정 행동(광고 상품 페이지나 이벤트 페이지로 이동하는 등)..
요약 : 알람 설정 관련 코드들 특성을 분석해서 아래 코드 완성 // 최초 1번만 실행해도 괜찮음. // 계속 실행해도 괜찮지만, 팝업은 안뜨고 completion은 매번 실행됨. UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound], completionHandler: { (granted, error) in print("requestAuthorization granted = \(granted)") if let e = error { print("error = \(e)") } }) // 매번 실행하기. 디바이스 토큰이 언제 바뀔지 모름. // 팝업이 뜨거나 하지 않음. 델리게이트로 APNS서버에 등록된..

색을 표현하는 방법은 RGB라고 해서, 단순하게 끝이 아니다. 어떤 모델인가에 따라, 각 상수(R,G,B)들이 가지는 가중치가 달라진다. 일반적인 모델로 sRGB가 있으며, ( 0.0~1.0 범위, 8비트 ) 0.0~1.0의 범위를 초과한 값도 색으로 표현해주는 Extended sRGB가 있고, ( Xcode의 기본 ColorSpace ) 16비트를 사용하면서 표현할 수 있는 색 범위가 넓어진 DisplayP3 (DP3)도 있다. 이런 모델들을, Xcode, Swift 에서는 ColorSpace 라고 하며, 이미지 파일에서는 ColorSync Profile 이라고 한다. iOS9.3 & 아이폰7 부터 DisplayP3 모델을 지원하며, 디자이너분들에게 DP3로 적용해달라는 요청이 들어와서 처음 알게 되었..
프로토콜이란? 특정 역할을 하기 위한, 메소드, 프로퍼티, 기타 요구사항 등의 청사진. 프로토콜은 정의를 제시하지 기능 구현은 안함. (추상의 클래스 역할) 프로토콜의 장점 2015년 9월, WWDC에서 스위프트 버전 2.0을 발표하면서, 스위프트는 프로토콜 지향 언어(Protocol-Oriented Language) 라 칭함 레퍼런스 시멘틱스(class)는 추적에 많은 비용이 들어감. => 프로토콜을 이용하면 값 시멘틱스(struct)로 캡슐화, 추상화를 할 수 있다. 프로토콜 익스텐션의 초기구현을 사용하여 재사용성도 챙길 수 있다. 테스트시, Mocking 을 쉽게 할 수 있다. ( 테스트할 모듈은 구현체로, 다른 모듈은 Protocol을 채택하고 테스트 결과를 확인할 수 있는 Mock 으로 사용. ..
1. Closure란? 호출(실행) 가능한 코드 블록. 클로저 안에서, 클로저가 작성된 범위의 변수나 함수들 접근 가능. 다른 범위에서 실행되어도, 작성된 범위의 항목만 접근 가능. 2. map 메소드로 축약문법 알아보기 map은 배열의 모든 원소에 특정 연산을 수행한 배열을 반환. var numbers = [20, 19, 7, 12] numbers.map({ (number: Int) -> Int in return 3 * number }) // [60, 57, 21, 36] 2-1. return 생략 명령어가 하나뿐인 클로저라면, 자동으로 그 명령어의 반환값을 리턴함. var numbers = [20, 19, 7, 12] numbers.map({ (number: Int) -> Int in 3 * numb..