본문 바로가기

분류 전체보기54

[Swift] Objective-C ↔ Swift 브릿징 Objective-C 에서 Swift 사용하는 방법#import "프로젝트 명-Swift.h"를 사용하면 swift 객체를 Objective-C 문법 그대로 활용 가능#import "ViewController.h" #import "프로젝트 명-Sift.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; popCalendarViewController = [[PopCalendarViewController alloc] init]; } - (IBAction)buttonClicked:(id)sender { popCalendarViewController.modalPres.. 2023. 12. 3.
[Swift] 메서드 체이닝을 활용하여 UIKit을 SwiftUI처럼 사용하기 View 객체를 생성할 때 어떻게든 코드를 편하게 작성해보려고 노력해봤지만기본 UIKit으로는 다음과 같이 가독성을 높이는데 한계점이 있었습니다. lazy var button1: UIButton = { let button = UIButton() var config = UIButton.Configuration.plain() config.title = "Plain Button" config.subtitle = "SubTitle" config.buttonSize = .medium config.image = UIImage(systemName: "swift") button.configuration = config button.addTarget(self, action: #selector(button1Tapped),.. 2023. 11. 13.
[Swift] `@dynamicMemberLookup과 KeyPath 그리고 WritableKeyPath<Root, Value>` KeyPath는 Swift의 기능 중 하나로, 타입 안전한 속성 또는 서브스크립트에 대한 참조를 나타냅니다. 이를 사용하면 속성이나 서브스크립트의 값을 타입 안전하게 저장하고 조작할 수 있습니다. 예를 들어, Person이라는 구조체를 정의하고 name이라는 속성을 가지고 있다고 가정해봅시다. 이때 Person 구조체의 인스턴스에서 name 속성에 접근하고자 한다면, KeyPath를 사용하여 타입 안전하게 이러한 속성에 접근할 수 있습니다.struct Person { let name: String } let person = Person(name: "jimmy") let nameKeyPath = \Person.name person[keyPath: nameKeyPath] // "jimmy" person[ke.. 2023. 11. 12.
[Swift] 뷰 재사용하기 - Delegate 패턴 활용 얼마전 개발한 운동 기록앱인 JimFit에서 손잡이를 통해 높이 조절이 가능한 바텀뷰를 구현했습니다. 바텀뷰에는 UISwipeGestureRecognizer, TitleLable, RighBarButton이 있습니다.여러 뷰컨트롤러에서 이를 재사용하고 있기 때문에 코드를 수정할 때 뷰컨트롤러과 바텀뷰 간에 의존성이 발생해 코드 수정에 어려움을 겪었습니다. 이 문제는 Protocol과 Delegate 패턴을 활용하여 의존성을 분리하고, 직관적인 코드를 구현할 수 있었습니다. 1. GrabberViewDelegate Protocol 정의하기먼저, GrabberViewDelegate Protocol을 정의합니다. 이 Protocol은 GrabberView에서 발생하는 이벤트를 처리하기 위해 구현해야 할 메서드.. 2023. 11. 12.
[Swift] ETag를 활용한 캐시 유효성 검증 ( 서버 비용 줄이기) JimFit 앱을 개발하면서 운동 DB를 관리하는 데 많은 고민을 했습니다.로컬 디바이스에서 관리하기 위해 Realm 형태의 DB를 생성하기로 선택했습니다.이로 인해 AppBundle에서는 읽기가 가능하지만 쓰기에 제약이 있어 Realm 파일에 접근하는 데 문제가 발생했습니다. 이 문제는 다음과 같은 방법으로 해결할 수 있었습니다. [Swift] Realm 파일을 프로젝트 내부에 삽입하는 방법 및 사용하기 (파일 접근 에러)요약실제 기기에서는 번들에 있는 Realm 파일에 접근할 수 없어서 파일 접근 에러가 발생합니다. 이를 해결하기 위해 앱이 실행 중일 때 Realm 파일을 앱의 documentDirectory로 복사하여 사용하는 방법을 사용할 수 있습니다. 이렇게 하면 파일에 대한 읽기 및 쓰기 권한.. 2023. 11. 12.
[Swift] 프로젝트에 SRP와 CleanCode적용해보기 CleanCode는 소프트웨어 개발에서 가독성과 유지보수성을 높이기 위해 적용되는 개발 방법론입니다. CleanCode의 함수 파트를 읽으면서 제가 작성한 코드를 반성하게 되었는데요. 클린코드에서 함수를 깨끗하게 작성하기 위한 여러 방법들 중 가장 인상 깊었던 규칙 몇가지를 제 프로젝트에 적용해봤습니다. 가장 인상 깊었던 규칙 은 다음과 같습니다.1. 함수는 작게 만들어라2. 함수 내 모든 문장의 추상화 수준은 동일해야 한다3. 서술적인 이름을 사용해라4. 함수는 한 가지만 해야한다(SRP) 먼저 저를 반성하게 만든 문제의 코드를 보겠습니다.Beforefinal class WorkoutLogTableViewCell: UITableViewCell { var workout: Workout? { didSet .. 2023. 11. 12.