목록iOS 개발 (7)
원블루의 블로그

까마득한 2년전, 새로운 직장에서 9개월이 되었을 쯤. 통신 모듈 리팩토링을 단행했었다.그때, 회고록을 작성해야했지만, 이제라도 좀 정리를 해보려고 한다.기존 API 통신 구조의 문제점1. Delegate 패턴 기반의 복잡한 응답 처리현재 API 수신부는 Delegate 패턴을 사용하고 있었고, 하나의 Delegate 함수에서 여러 API 응답을 Flag로 분기하여 제어하고 있었다.성공과 실패 응답 처리가 분리되어 있어, 관련 코드를 여기저기 찾아가며 작업해야 하는 불편함이 있었다.또한, 성공 시에도 CODE 값에 따라 다른 Delegate 함수가 호출되는 구조였다.didSuccess(통신 성공)didFailCode(통신 성공, Code ≠ Success)didFail(통신 실패)이처럼, API 응답이 ..

Xcode16에서 iOS 14 버전의 아이폰에 빌드를 하려고 하니 'Could not locate device support files' 오류가 나면서 빌드 시작이 불가능했다. 이유는 Xcode16에서 iOS15 이하 버전의 Device Support Files를 자동으로 포함하고 있지 않기 때문이다.https://github.com/filsv/iOSDeviceSupport 에서 iOS 12, iOS 13, iOS 14 등의 하위버전 지원파일을 다운로드하면 해결할 수 있다. 원하는 버전의 Device Support File을 내려받아서 아래 경로에 넣어주면 끝./Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupp..
스와이프로 화면 뒤로가기는 iOS에서 기본으로 제공하는 기능이라서코드 한 줄로 간단히 구현할 수 있을 줄 알았지만~스와이프하면서 테이블뷰가 스크롤 되는 문제스와이프를 통한 뒤로가기 시에도 Analytics 로그를 찍어야하는 문제통신 요청 타이밍 문제위와 같은 문제들이 있었습니다. 위 문제의 해결법을 포함하는 코드를 공유합니다.첫번째(최상위) ViewController 설정 코드class RootViewController: UIViewController, UIGestureRecognizerDelegate { override func viewDidLoad() { super.viewDidLoad() //1. Pop Gesture(스와이프해서 뒤로가기) 기..
Line Height는 텍스트 한 줄의 높이를 나타낸다. Line Height를 이용하면 줄간격을 조정할 수 있다.UIKit에서는 NSParagraphStyle의 lineHeightMultiple 값으로 Line Height를 상대적으로 설정한다.예를 들어 글자크기가 10pt 일 때 lineHeightMultiple 값을 1.5로 하면 줄높이(줄간격)는 15pt가 된다.시스템 기본값을 사용하고 싶다면 0으로 설정해 주면 된다. 아래코드는 NSMutableAttributedString에서 기존 ParagraphStyle을 유지하면서 lineHeight 값을 설정하는 Extension 함수이다.extension NSMutableAttributedString { @objc func lineHeig..
불기력 서기력 변환 구현예시로 태국 시간을 나타내는 String "2567-07-05 19:00:00"을 DateFormatter를 이용하여 한국 시간 String 으로 변환해보자.태국인은 기본적으로 불기력(Buddhist Calendar)을 사용한다.명시적으로 Calendar 값을 설정하는 걸 보여주기 위해 Locale 설정은 사용 하지 않았다.import Foundationlet thaiDate = "2567-07-05 19:00:00" //태국 형식의 불기력 날짜 샘플let formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" //날짜 포맷formatter.timeZone = TimeZone(abbreviation: "IC..
Associated Object를 이용하여 GestureRecognizer 연결 코드를 간략화하는 방법을 정리해 보려합니다.별도의 함수 선언 같은 코드를 없애고 콜백(comletion handler)형태로 등록할 수 있도록 만드는 것이 목표였습니다. 가장 많이 사용하는 TapGestureRecognizer과 Highlight 효과 적용에 사용할 LongPressGestureRecognizer에 대해 간략화를 진행해 보았습니다.AS-IS / TO-BEUIView에 탭 제스처 인식기를 연결시킬 때 아래처럼 3줄의 코드가 필요합니다.이벤트 처리부도 별도의 함수(func viewTapped)를 사용해야해서 가독성도 좋지 못합니다.let tapGesture = UITapGestureRecognizer(target..
swift 개발을 하면서 class extension을 사용할 일이 많습니다.extention은 굉장히 편리한 기능이긴 하지만 Stored Property(저장 프로퍼티)를 추가할 수 없다는 한계가 있습니다.이때 Objectivie-C에서 제공하는 Associated Object 기능을 사용하면 Stored Property를 추가한 것 같은 Computed Property를 만들 수 있습니다. 작동원리 Associated Object는 대상 객체와 분리된 별도의 객체로서, 포인터 키를 통해 동적으로 대상 객체에 연결하여 구현됩니다.UserDefaults와 동일하지는 않지만 비슷한 구조라고 생각하면 이해가 쉽습니다.1. 포인터 키를 참조자로 대상 객체에 retain 시켜서 Associated Object를..