본문 바로가기
반응형

분류 전체보기109

[iOS] Apple 로그인 구현 iOS 앱을 앱스토어에 베포 시 소셜 로그인을 사용하기 위해서는 아래 그림과 같이 Apple 로그인을 구현해야 하는 가이드라인이 생겨서 Apple 로그인 구현에 대해 기록해보겠습니다. 먼저, 프로젝트를 생성하고 "Signing & Capabilities" 창에서 Command + Shift + L을 눌러서 Sign in with Apple을 추가해줍니다. 그리고 프로젝트의 bundle ID와 Team이 설정되어 있어야 합니다. 그리고 애플 문서에서 제공하는 예제에 따라 스토리보드에서 아래 그림과 같이 StackView를 하나 만들어줍니다. 실행 시 아래 오른쪽 그림과 같이 버튼이 생깁니다. 그 후, ViewController로 넘어가서 아래 코드를 작성해줍니다. "import AuthenticationS.. 2021. 2. 1.
[Algorithm/Programmers] 베스트앨범 Swift 베스트앨범 Level3 Hash 문제 풀이: 속한 노래가 많이 재생된 장르를 먼저 수록합니다. -> 장르별로 총 재생 횟수 계산하여 내림차순으로 정렬 장르 내에서 많이 재생된 노래를 먼저 수록합니다. -> 재생 횟수 내림차순으로 정렬 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. -> 재생횟수가 같다면 인덱스 오름차순으로 정렬 0 1 2 3 4 classic pop classic classic pop 500 600 150 800 2500 장르에 대한 데이터(장르별 총 재생횟수: total, 고유 번호별 재싱 횟수: (index,play))를 딕셔너리로 생성한다. 스위프트의 딕셔너리는 할당 또는 value 업데이트로밖에 추가하는 방법이 없다. 그래서 장르는 같지만 .. 2021. 1. 29.
[iOS] NSOperationQueue와 GCD Queue의 차이점 NSOperationQueue와 GCD Queue의 차이점에 대해서 기록해보겠습니다. iOS에는 멀티스레딩을 할 수 있는 두 가지 방법이 있습니다. GCD(Grand Central Dispatch)는 C 기반의 low-level API이고 NSOperation은 Obj-C 기반으로 만들어진 high-level API가 있습니다. NSOperationQueue NSOperation 객체의 우선순위 및 준비 상태에 따라 대기열에 있는 객체를 실행한다. Operation Queue에 추가된 작업은 작업이 완료될 때까지 대기열에 남아 있다. 작업이 추가된 후에는 대기열에서 직접 제거할 수 없다. 모든 작업이 끝나지 않은 상태에서 Operation queue를 중지시키면 메모리 릭이 발생할 수 있다. GCD에서는.. 2021. 1. 29.
[Algorithm/Programmers] 캐시 Swift 캐시 - 2018 카카오 1차 / Level 2 문제 풀이: 캐시 교체 알고리즘인 LRU(Least Recently Used)를 사용한다. 대소문자를 구분하지 않는다. hit일 경우 실행시간은 1로 계산하며, miss일 경우 5로 계산한다. 큐를 이용한다. 1. 대소문자를 구분하지 않기 때문에 도시들을 소문자로 바꿔준다. 2. 캐시의 사이즈가 0일 경우 도시의 수만큼 5를 곱해서 리턴한다. 3. 해당 순서의 도시가 캐시에 없을 경우 (miss) 3-1. 도시를 캐시에 넣어준다. 3-2. 캐시가 가득 찼다면 가장 오래된 데이터를 제거해주고 넣어준다. 3-3. 실행시간을 5만큼 더해준다. 4. 해당 순서의 도시가 캐시에 있을 경우 (hit) 4-1. 캐시에서 해당 도시의 데이터를 꺼내고 제일 앞으로 옮겨준다.. 2021. 1. 27.
[Swift] flatMap & compactMap flatMap과 compactMap의 차이에 대해 기록해보겠습니다. 아래 그림과 같이, Swift 4.1부터는 원래 사용되었던 flatMap이 deprecated되고 새로운 flatMap과 compactMap으로 바뀝니다. 새롭게 바뀐 flatMap은 2차원 배열에서 1차원 배열로 flatten하게 만들어주는 역할로 쓰입니다. 즉, 내부의 컨텍스트를 같은 위상으로 만들어줍니다. var nums = [[1,2,3],[4,5],[6]] let flatten = nums.flatMap { $0 } // [1,2,3,4,5,6] let compacted = nums.compactMap { $0 } // [[1,2,3],[4,5],[6]] compactMap은 nil을 제거하고 옵셔널 바인딩이 필요할 때 사용합니.. 2021. 1. 23.
[iOS] URLSession API URLSession과 관련해서 기록해보겠습니다. URLSession HTTP/HTTPS를 통해 콘텐츠(데이터)를 주고받기 위해 API를 제공하는 클래스입니다. 앱이 실행중이지 않거나 일시 중단된 동안 백그라운드 작업을 통해 콘텐츠를 다운로드 하는 것을 수행하기도 합니다. 이 API는 URLSessionDelegate와 URLSessionTaskDelegate를 사용하여 인증을 지원하고 리다이렉션과 task completion과 같은 이벤트를 수신할 수 있습니다. 앱은 하나 이상의 URLSession 인스턴스를 생성하며 각 인스턴스는 관련 데이터 전송 작업 그룹을 조정합니다. 예를 들어, 웹 브라우저를 만드는 경우 앱은 탭 또는 창(window)당 하나의 세션을 만들 수 있습니다. 각 세션 내에서 앱은 특.. 2021. 1. 21.
[iOS] AppDelegate & SceneDelegate 앱에서 AppDelegate와 SceneDelegate에 대해서 알아보겠습니다. iOS 13 이전 버전의 앱에서는 app delegate가 앱의 실행과 포그라운드, 백그라운드에 대한 로직을 처리하는 역할을 했습니다. iOS 13 버전부터는 app delegate의 역할이 app delegate와 scene delegate로 나뉘어졌습니다. 그 이유는 아이패드 OS의 새로운 멀티윈도우 지원 기능의 결과라고 합니다. AppDelegate 애플리케이션 단계의 라이프 사이클 이벤트에 대해 처리를 담당합니다. 기본 메서드 func application(_:didFinishLaunchingWithOptions:) -> Bool 이 메서드는 앱이 시작되고 앱의 설정이 완료되면 호출됩니다. iOS 13 이전 버전의 앱.. 2021. 1. 19.
[iOS] App의 Life Cycle 앱이 포그라운드나 백그라운드에 있을 때 시스템 알림에 응답하고 다른 중요한 시스템 관련 이벤트를 처리한다. Overview 앱의 현재 상태에 따라 언제든지 할 수 있는 것과 하지 못하는 것이 결정된다. 예를 들어, 앱이 포그라운드 상태일 때 사용자의 주의를 끌기 때문에, CPU를 포함한 시스템 자원의 우선순위를 갖는다. 반대로 앱이 백그라운드 상태일 때 화면에 없기 때문에 가능한 한 적은 일을 해야하고 아무것도 안하는 것을 선호한다. 앱이 변경되는 상태에 따라 앱의 동작을 조정해야 한다. 앱의 상태가 변경될 때, UIKit은 적절한 델리게이트 객체를의 메서드를 호출해준다. iOS13 이상 버전은 scene 기반 앱의 경우 라이프사이클 이벤트에 반응하기 위해 UISceneDelegate 객체를 이용한다. .. 2021. 1. 16.
[Algorithm/Programmers] 올바른 괄호 Swift 올바른 괄호 Level2 문제 풀이: 다른 방법도 있겠지만 생각나는 방법으로 풀었다. 1. "("이라면 카운트를 1 증가시킨다. 2. ")"이라면 카운트가 0일 경우 괄호 짝이 맞지 않으므로 false 리턴 2-1. 카운트가 0이 아니라면 카운트를 1 감소시킨다. 3. 주어진 문자열을 다 돌았을 때 카운트의 개수가 0 이라면 true 3-1. 아니라면 false 코드: import Foundation func solution(_ s:String) -> Bool { var cnt = 0 for c in s { if c == "(" { cnt += 1 } else { if cnt == 0 { return false } else { cnt -= 1 } } } return cnt == 0 ? true : fal.. 2021. 1. 15.
[Algorithm/Programmers] 다음 큰 숫자 Swift 다음 큰 숫자 Level2 문제 풀이: 1. 주어진 숫자(n)를 2진법으로 바꿔서 1의 숫자 개수를 구한다. 2. n에 1을 더한 값(next)을 2진법으로 바꿔서 1의 숫자 개수를 구한다. 3. 1번과 2번을 비교하면서 숫자가 같을 경우 next값을 리턴한다. 4. 같지 않다면 next에 1을 더해준다. 5. 1-4번까지 무한 반복 코드: import Foundation func solution(_ n:Int) -> Int { var next = n+1 while true { if checkBinary(n) == checkBinary(next) { return next } next += 1 } } func checkBinary(_ n: Int) -> Int { let s = String(n, radix.. 2021. 1. 15.
반응형