iOS 44

[ iOS/Rx ] 1. RxSwift란?

🧚🏻‍♀️요약🧚🏻‍♀️ Rx는 Observable 형태로 표현되는 비동기적 데이터 흐름을 사용한 프로그래밍이다. 그것이 기반이 되어 Swift 전용으로 구현된 것이 바로 RxSwift이다. Rx는 비동기적 작업과 데이터 흐름 구성을 쉽게 하기 위해 사용되며 반응형 프로그래밍이자 함수형 프로그래밍으로 되어있다. 전달되는 이벤트에 바로 반응하여 작업이 이루어진다. Reactive 구성 요소로는 Observable(관찰대상), Operator(연산자), Observer(관찰자)가 있으며, 관찰자가 관찰대상을 구독(Subscribe)해야만 이벤트를 받을 수 있다. 데이터 흐름들이 이벤트에 담겨 Observable에서 시작해 Operator을 거쳐 Observer에게 도달한다. 비동기 작업 Rx에 대해 알기 전 ..

iOS/Rx 2023.06.27

[ iOS ] 동기와 비동기 / 직렬과 동시성

공부 배경 RxSwift를 공부하려 하는데 그전에 먼저 비동기에 대해 잘 알고 있어야 할 것 같았다. 동기와 비동기를 배웠지만 제대로 아는 것 같지 않아 이번 기회에 정리를 하고, 함께 직렬과 동시성도 공부해서 4가지의 차이를 분명히 알고자 한다. 기본 일단 기본적으로 코드를 작성했을 때에는 위와 같은 방식으로 작업이 처리된다. 메인 스레드가 모든 일을 전부 처리하게 되어 화면 로드가 오래 걸리는 등 문제가 많다. 이는 사용자 경험을 안 좋게 만들어서 우리는 주의해야 할 필요가 있다. 동기와 비동기 동기와 비동기는 둘다 다른 스레드로 작업을 보낸다는 공통점이 있다. 둘의 차이점은 작업을 보내놓고 기다리느냐(Block) 또는 다음으로 해야하는 작업을 수행하느냐의 차이이다. 동기는 작업을 보내놓고 그 작업이..

iOS 2023.06.22

[ iOS ] CollectionView의 Section 숨기기 - CompositionalLayout

CollectionView의 Section CollectionView는 여러 Section을 둘 수 있다. 가장 대표적인 예로는 App Store이다. 아래 사진을 보면 아래로도 스크롤이 되며 여러 단락으로 내용이 나뉘어져 있고 각 단락이 가로로 스크롤이 되어 여러 아이템들을 보여준다. 앱스토어처럼 항상 collectionView의 데이터가 있는 경우도 있지만 메모, 다이어리를 저장 목적 CollectionView는 데이터 저장 전이나 데이터를 다 삭제한 경우에는 CollectionView가 데이터 없이 빈 공간으로 있어야 한다. Section이 하나거나 마지막 Section이라면 데이터가 없더라도 문제되지 않지만 첫 번째 또는 중간 Section이라면 데이터가 없을 경우 다음 Section까지 그저 텅..

iOS 2023.03.06

[ iOS ] ScrollView 화면 캡쳐하기 (Image Creation)

문제무다, 꾸주니 등 몇몇 앱들은 화면을 캡쳐한 듯 이미지화해 저장 또는 공유하는 기능을 제공한다. 오늘은 이 기능을 구현할 예정인데, 화면 캡쳐에서 더 나아가 화면 밖 아래로 내용이 계속 이어지는 ScrollView의 전체 화면을 캡쳐하는, 즉 이미지화하는 작업을 정리할 것이다. 이 기능을 구현하여 UIActivityViewController를 사용해 이미지를 인스타그램에 공유할 수 있다. UIGrapics~UIKit에는 Image와 PDF 을 생성하고 Drawing 할 수 있는 여러 클래스와 함수들을 제공한다. 이번에 알아볼 함수는 Image와 PDF의 Image Creation 파트에 나오는 함수 중 아래 3개와 Drawing의 Shadows/Graphics Context Promitives의 함수..

iOS 2023.02.18

[ iOS ] UserDefaults - 커스텀 타입 저장하기 (Attempt to insert non-property list object 오류)

UserDefaults와 non-property list 오류 UserDefaults는 Float, Double, Int, URL 등 기본 타입에 대한 편리한 메서드들을 제공한다. 게다가 NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary 타입이라면 UserDefaults에 자유롭게 저장 및 불러올 수 있다. 하지만 개발을 할 때에는 보통 아래 예시와 같이 커스텀한 타입을 사용한다. struct User { let name: String let age: String } 이 커스텀 타입의 객체를 생성해 UserDefaults에 저장해보자. let user = User(name: "사용자", age: "12") Userdeafaults.standard.se..

iOS 2023.01.21

[ iOS ] Property list

Property list property list는 객체 직렬화를 위한 파일이다. plist라는 확장자를 가지며 우리가 아는 info.plist가 바로 property list이다. property list는 용량이 작고 생성하기 쉬우며 serialization 작업이 용이하다. Cocoa Foundation과 Core Foundation은 property list를 serializarion하고 deserialization하는데 관련한 APIs을 가지고 있다. Property list : dictionaries, arrays, strings, numbers (integer and float), dates, binary data, and Boolean values + [ Swift ] Serializati..

iOS 2023.01.20

[ iOS ] 공유하기 기능 구현 - UIActivityViewController

목차 UIActivityViewController 생성하기 excludedActivityTypes를 사용해 필요없는 앱 제거 completionWithItemsHandler 처리하기 UIActivityViewController의 또 다른 Instance Property: allowsProminentActivity Apple에서 기본적으로 제공하는 '공유하기' 기능이 있다. 메일, 메모장, 클립보드 복사 등을 사용할 수도 있고, 카톡, 트위터, 페이스북 등 타 앱에서 공유기능을 지원한다면 개발자가 따로 구현할 필요없이 자신의 앱에서 타 앱으로 데이터 공유가 가능하다. '공유하기'는 UIActivityViewController 클래스를 통해 구현할 수 있다. UIAvtivityViewController는 U..

iOS 2023.01.03

[ iOS ] UIListContentConfiguration: CollectionView에 기본 Cell 사용하기 (14+)

공부 기록 TableView의 Cell에서 contentConfiguration 프로퍼티가 있듯이 CollectionView의 Cell에서도 contentConfiguration이 있다. 하지만 UITableViewCell에는 defaultContentConfiguration()이 있지만, UICollectionView에서는 해당 프로퍼티를 가지고 있지 않다. [ iOS ] contentConfiguration: TableView에 기본 Cell 사용하기 (iOS 14+) 공부 기록 UITableViewCell은 커스텀하지 않고도 cell을 구성할 수 있도록 여러 옵션을 제공한다. 가장 간단한 방법으로는 UITableViewCell의 프로퍼티 중 textLabel, detailTextLabel, imag..

iOS 2022.12.04

[ iOS ] contentConfiguration: TableView에 기본 Cell 사용하기 (iOS 14+)

공부 기록 UITableViewCell은 커스텀하지 않고도 cell을 구성할 수 있도록 여러 옵션을 제공한다. 가장 간단한 방법으로는 UITableViewCell의 프로퍼티 중 textLabel, detailTextLabel, imageView를 사용하는 것이였지만, iOS 14 이후부터는 이 프로퍼티들은 Deprecated 되어 더 이상 사용할 수 없다. 이것들을 대체하는 프로퍼티가 개발되었는데, 바로 contentConfiguration 이다. UIButton에서도 이와 유사한 프로퍼티인 configuration(iOS 15+)이 있다. 많은 Class들에서 Configuration이 등장하는 것으로 보아 개발자가 View 구성을 한 객체로 정리되며 재사용이 가능한 형태로 개발하도록 Apple에서 방..

iOS 2022.11.29

[ iOS ] UIButton.Configuration 사용하기(1) - Init, Title (iOS 15)

이 글은 iOS 15 버전을 기준으로 작성된 글입니다. UIButton.Configuration이란? iOS 2.0+ 부터 UIButton의 모양은 setTitle(:for:), setImage(:for:) 과 같은 UIButton의 인스턴스 메서드를 통해 설정할 수 있었다. 하지만 iOS 15+ 부터는 UIButton.Configuration이 추가되면서 새로운 방법으로 UIButton의 모양과 행동을 설정할 수 있게 되었다. Configuration은 이전에 사용하던 메서드들과 함께 사용할 수 있으며, 그 메서드들을 아예 대체할 수도 있다. Configuration의 장점은 기존 버튼의 모양과 행동을 수정하고 싶을 때 코드를 일일이 수정할 필요없이 새로운 Configuration을 구성한 뒤 UIBu..

iOS 2022.10.13

[iOS ] 데이터 전달 : (3/5) NotificationCenter로 전달하기

문제 다양한 방법으로 데이터 전달하기 1. Property로 전달하기 2. DelegatePattern으로 전달하기 3. NotificationCenter로 전달하기 4. Closure로 전달하기 5. 장단점 정리 NotificatonCenter로 전달하기 3 - 1 화면 전환 시 데이터를 전달하는 데에 여러가지 방법이 있는데, 그 중 NotificationCenter를 사용해 데이터를 전달하는 방법을 알아보자. NotificationCenter는 알림 발송 매커니즘(notification dispatch mechanism)이다. NotificationCenter는 알림이 게시(post)되면 등록된 옵져버에 알린다(broadcast). 알림을 받은 옵져버는 미리 설정된 메서드를 호출해 작업을 수행한다. ..

iOS 2022.06.21

[ iOS ] 데이터 전달 : (2/5) DelegatePattern으로 전달하기

문제 다양한 방법으로 데이터 전달하기 1. Property로 전달하기 2. DelegatePattern으로 전달하기 3. NotificationCenter로 전달하기 4. Closure로 전달하기 5. 장단점 정리 DelegatePattern으로 전달하기 2 - 1 화면 전환 시 데이터를 전달하는 데에 여러가지 방법이 있는데, 그 중 Delegate Pattern을 사용해 데이터를 전달하는 방법을 알아보자. 2의 ViewController에서 Delegate 프로토콜을 선언해 화면 전환 버튼의 액션함수에서 방금 선언해준 Delegate의 메서드를 호출한다. 이 메서드의 구현은 1의 ViewController에서 이루어진다. 메서드 호출 시 데이터를 인수로 넘겨주고, 구현 부분에서는 매개변수를 원하는 곳에..

iOS 2022.06.20
728x90