SWiFT 20

Swift) UUID + KeyChain

Device uuid를 계속 고정할 수 있게 할 수 있다. 그러나 uuid는 앱을 삭제 후 재 실행하면 변경된다.iOS5 이전에는 디바이스마다 고유 값 udid를 제공했었는데 앱마다 udid가 같다는 이유로 더 이상 지원하지 않는다.다만 공장 초기화 시에는 변경된다.사용을 위해 keychain 사용자 설정을 해야한다고 되어 있는데, 필자는 다른 셋팅 없이 되었다.라이브러리 사용을 2가지만 하면된다.라이브러리 다운로드코드 2줄라이브러리 다운로드주소: https://github.com/taka0125/TAKUUIDpod, spm 둘다 지원한다.코드TAKUUIDStorage.sharedInstance().migrate() uuidInTheKeychain.text = TAKUUIDStorage.sharedIn..

iOS/Swift 2024.05.31

Swift) Protocol을 이용한 코드 개선

Protocol으로 반복되는 코드를 개선해 봅시다.extension 활용예시ex) protocol 코드protocol GameProcess: AnyObject { func start() func end()}extension GameProcess { func start() { print("Start Game") } func end() { print("End Game") }}먼저 프로토콜을 사용해서 기능을 정의합니다.그리고 extension으로 기능에 대한 상세 구현 합니다.수정사항 xex) 예시코드 1class WarGame: GameProcess { func go() { start() }}let warGame = Wa..

iOS/Swift 2024.05.24

Swift) Continuations 활용

Continuations에는 withCheckedContinuation, withCheckedThrowingContinuation 가 있습니다. 둘 중에 차이는 에러를 return 하는지 안하는지 차이가 있습니다.Continuations는 비동기 코드, Closure형태를 async로 변경할때 많이 사용합니다.단, 주의사항이 있습니다.한번에 continue를 두 번이상 호출하면 안되고, resume을 호출하면 안됩니다. 그렇게 되면 Task가 무기한 일시 중단 상태로 되어버립니다.(앱이 멈추고 결국엔 강제종료가 됩니다.)Closure를 async로 변경하는 예시 코드에러 xClosurefunc requestWeclomeMessage(completion: ((String) -> Void)) { compl..

iOS/Swift 2024.05.20

Refresh Control 위치, Navigation LargeTitle

Refresh Control 위치, Navigation LargeTitle 연락처 앱을 만들던 중 Refresh 기능을 넣었을 때, 개인적으로 LargeTitle 넣었을때 ActivityView의 위치가 어색해 보여서 수정할 수 있는지 찾아 보았다. 그런데 Navigation Title 스타일에 따라 ActivityView의 위치가 다르게 표시 되었고, 커스텀 방법은 찾지 못했다. 공식문서에서 자료를 찾으려고 해도 문서로 되어 있는건 결국 찾지 못했다. 그 대신 아이폰 기본 앱 중 메일, 연락처을 벤처마킹 해보니 아래의 사진과 동일해서, 내부적으로 설정되어 있는 따른 이유가 있을 것 같다. Nomal Large

Swift) 코드로 UITableView 구현하기

Swift) 코드로 UITableView 구현하기 코드로 UITableView를 구현해 봅시다. TableView란?? A view that presents data using rows in a single column. -> "단일 열의 행을 사용하여 데이터를 표시하는 보기 입니다" 라고 공식문서에서 소개해주네요 구현된 TableView를 보자면 아래처럼 각각의 표처럼 View가 되어 있고 하나의 칸마다 데이터가 들어간 것을 볼 수 있네요. 또한 관련 행을 섹션으로 그룹화하여 콘텐츠를 관리하거나 탐색할 수 있습니다. 구성 UITableView는 테이블의 기본 모양을 관리합니다. 하지만 앱은 실제 컨텐츠를 표시하는 각각의 Cell(UITableViewCell)을 제공합니다. 아래의 셀 구성은 아래 처럼 ..

iOS/Swift 2023.02.04

SwiftUI alert in iOS14

SwiftUI 개발 중 최소타겟 iOS14버전으로 하는 중 alert이 필요한 상황이 있었다. 아래와 같이 .alert 코드 작성 시 아래에 있는 .alert만 호출이 된다. .alert(isPresented: $presentAlert) { Alert( title: Text("Title"), message: Text("Message") ) } .alert(isPresented: $presentAlert2) { Alert( title: Text("Title2"), message: Text("Message2") ) } 그래서 검색해보니 스택오버플로우에서 활용방안에 대해서 나와있었다. https://stackoverflow.com/questions/58069516/how-can-i-have-two-alerts..

iOS/SwiftUI 2023.01.17

야곰 아카데미 - 커리어 스타터 수료 후기

6개월간(2022.04.11 ~ 2022.10.17)의 야곰 아카데미 캠프 기간을 보냈다. 조금이라도 기억이 남아있을 때 회고를 짧게나마 적어보았다. 왜 야곰 아카데미를 선택했나? iOS 공부를 하기 위해 유튜브를 통해서 야곰이 올린 유튜브 강의를 본적이 있다. 유튜브 강의보면서도 내용도 내용이지만, 야곰의 목소리가 귀에 쏙쏙 들어왔다.(전달력이 좋았다!!). 그리고나서 우연치 않게 야곰아카데미가 있다는 것을 알았다. 수강 결정에 있어 온라인교육이라서 고민은 있었지만, 현업자의 리뷰와 협업 경험이 예비 개발자로써 좋은 경험이 될 것 같았다. 그래서 제대로 iOS개발자가 되기 위한 첫 발판을 야곰아카데미로 선택했다! 야곰 아카데미에서 무엇을 배웠나? 1. 공부하는 방법 일단 주입식 교육이 절대적으로 아니였..

Swift) 옵저버 프로퍼티를 이용한 데이터 바인딩

데이터 바인딩을 위한 필요한 것에 대해 생각해 보자 프로퍼티 옵저버를 등록한 저장 프로퍼티 프로퍼티 옵저버에 등록되어 값이 변경될 떄마다 호출될 클로저 프로퍼티 생성 특정 행동에 대한 실행 메소드 선언을 위한 @escaping 클로저 함수 예시 코드 데이터 바인딩 실행 순서에 대해 생각해보자 옵저버 프로퍼티에 선언된 클로저 변수 실행 myData 프로퍼티 값 변경 될 때마다 클로저 변수 실행 Why? 옵저버 프로퍼티에 클로저 변수가 선언되어 있어서 이스케이핑 클로저 함수에서 특정 행동을 등록하면 프로퍼티에 변화가 있을 시 실행 예제 코드에서 print()문을 수행할 것을 등록 @escaping 클로저(callback) 실행 Why? myDataListener가 클로저(callback)를 알고 있어 매개변..

iOS/Swift 2022.10.18

Swift) Delegate, Notification 둘 중 어느 것을 사용해야 할까

앱에서 화면 간 데이터 전달을 위해 여러 방식이 있는데 대표적으로 Delegate와 Notification이 있는데 둘 중에 어떠한 상황에서 어떤 것을 쓰는게 좋을까 생각해 보았다. 일단 각 패턴에 대해 알아보자 Delegate Delegate 패턴은 다른 객체의 인스턴스를 내부적으로 가지고 있어 그 인스턴스를 활용하는 방식으로 사용 Notification 값의 변화에 따라 이벤트가 발생해야할 때 이것을 observe 하고 있는 방식으로 사용 구현 방법 및 사용방법 Delegate Delegate를 위한 프로토콜이 필요하다. 이벤트 처리 담당 객체가 알고 있어야함 Notification 값의 변화가 필요한 값에 observe하고 그에 맞는 이벤트만 발생시켜주면 됨 각 패턴의 장단점 Delegate 장점 ..

iOS/Swift 2022.10.12