참고한 유튜브 자료MVVM 아키텍처를 처음 공부했을 땐 RxSwift로 시작을 했었는데, Combine을 알고 나서 UIKit에서 Combine으로 MVVM을 할 수 있지 않을까 라는 생각에 찾아보고 시도해봤다.유튜브 예제는 통신 예제에 버튼을 누르면 랜덤한 글이 나오게 하는 것이고, 내가 한 건 로그인 화면을 구현한 것이다.프로젝트 세팅은 Storyboard로 진행했고 Combine을 제외한 라이브러리는 사용하지 않았다.간단한 로그인 회원가입 화면을 만들고 MVVM을 적용해봤다.final class SignInViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var signInButton: UIButton! ..
https://developer.apple.com/documentation/swiftui/view-styles View styles | Apple Developer DocumentationApply built-in and custom appearances and behaviors to different types of views.developer.apple.comLabel, Button 등의 View에 스타일을 지정하거나 커스텀 할 수 있게 하는 것이 ViewStyle이다.Label을 예로 들면,,,기본으로 Label의 style에는 4가지 정도가 있는데, 사용자가 커스텀 해서 스타일을 만들 수 있다.Custom Style을 만들기 위해서는 LabelStyle 프로토콜을 채택한 구조체를 만들면 된다.st..
SwiftUI 에서 지도를 띄우기 위해서는 먼저 MapKit을 import 해야한다.Map(coordinateRegion:, interactionModes:, showsUserLocation:, userTrackingMode:, annotationItems:, annotationContent:)MapKit을 import 하면 지도를 보여주는 Map 을 사용해 View에 보여줄 수 있다.coordinateRegion: Binding 타입으로 지도가 표시될 위치와 지도의 zoom level을 초기화해 주입한다.MKCoordinateRegion(center:, span:)MKCoordinateRegion(center:, latitudinalMeters:, longitudinalM..
EventKit달력, 미리알림 어플의 데이터에 접근 하여 이벤트를 생성, 검색, 편집을 할 수 있는 프레임워크.먼저 사용하기 전, info.plist에 권한 체크를 받아야 한다.let status = EKEventStore.authorizationStatus(for: .event)switch status {case .notDetermined: //아직 권한 팝업 뜨기 전 let accessGranted = try await ekStore.requestAccess(to: .event) guard accessGranted else { throw ServiceError.accessDenied }case .restricted: throw ServiceError.accessRes..
대부분 Json을 사용하기 때문에 XML을 사용할 일이 없었는데, OpenAPI를 하나 사용하다 보니 무조건 XML로만 데이터가 넘어와 XML을 파싱하는 법을 알아보고 적용해봤다. XMLParser Foundation에 기본으로 들어가 있는 XMLParser를 사용해 XML을 파싱할 수 있는데, Json과 달리 태그와 값으로 이루워진 XML특성상 사용을 위한 Delegate를 설정해줄 필요가 있다. 먼저 초기화는 간단하다. let parser = XMLParser(data: data) parser.delegate = subjectParser.self parser.parse() Data 타입의 XML을 XMLParser의 초기화 파라미터로 받을 수 있고, URL도 초기화시 받을 수 있는데, URL은 테스트..
저번에 UICollectionView의 Compositional Layout을 공부할 때 만들었던 영화앱의 API 통신 부분을 공부할 겸 변경하게 되었다.영화진흥원 API를 사용해 일간, 주간 박스 오피스 리스트를 가져오고, KMDB API를 사용해 영화 상세정보를 받아와 포스터를 띄웠다.///BoxOffice 일간, 주간 정보 모두 반환func searchBoxOfficeInfo(dateRange: DateRange) async throws -> [MovieInfo] { let url = APIInfo.boxOfficeHost + dateRange.rawValue var dataTask: DataTask switch dateRange { case .daily: let ..