일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
- 스위프트
- combine
- rxswift
- SWIFT
- UICollectionView
- Xcode
- 리팩토링
- uiscrollview
- swift documentation
- tableView
- 클린 코드
- Human interface guide
- collectionview
- Observable
- MVVM
- ios
- ribs
- Protocol
- HIG
- UITextView
- map
- RxCocoa
- 리펙터링
- 애니메이션
- 리펙토링
- Refactoring
- swiftUI
- uitableview
- clean architecture
- Clean Code
- Today
- Total
목록2022/09 (30)
김종권의 iOS 앱 개발 알아가기
목차) Combine - 목차 링크 Combine과 RxSwift의 주요 차이점 Combine과 RxSwift 모두 Publisher, Subscriber하는 컴포넌트가 있고, stream을 만들어서 그 stream안에 operator를 사용하여 이벤트를 처리하는 형태 Combine은 RxSwift보다 성능이 훨씬 향상 ex) 성능 테스트 map, filter, flatMap 등을 결합한 연산자 시간과 메모리 사용량 비교 // 출처: https://medium.com/@M0rtyMerr/will-combine-kill-rxswift-64780a150d89 import XCTest import Combine import RxSwift final class PlaygroundTests: XCTestCase ..
목차) Combine - 목차 링크 Combine async 작업들을 이벤트 처리 연산자로 결합하여 처리하는 방법 선언적인 프로그래밍 형태로 사용 Stream하나를 만들고 그 Stream에 필요한 operator를 덫붙여서 사용하는 선언적인 프로그래밍 방식 // 선언형 프로그래밍인 Combine 예제 코드 $username .debounce(for: 0.1, scheduler: RunLoop.main) .removeDuplicates() .map { $0.count >= 2 } .assign(to: \.valid, on: self) .store(in: &cancellableSet) 선언적인 프로그래밍이 되면서, 클로저를 이용한 콜백지옥에서 벗어날 수 있는 장점이 존재 Combine을 사용하면 이벤트 처리..
Combine 기본 개념 Combine이란? Combine 훓어보기 - RxSwift와의 차이점 ObservableObject @Published, objectWillChange Cancellable (AnyCancellable) Publisher (AnyPublisher, Published) Publisher 생성 연산자 (Just, Sequence, Future, Fail, Empty, Deferred, Record) Subscriber (AnySubscriber) Subject (CurrentValueSubject, PassthroughSubject) Scheduler (receive(on:), subscribe(on:), delay(for:scheduler:)) Combine 연산자 Operato..
목차) SwiftUI의 기본 - 목차 링크 EmptyView 이름 그대로 아무것도 가지고 있지 않은 뷰 EmptyView()에 frame, foregroundColor 옵션을 주어도 아무런 표시가 남지 않음 struct ContentView: View { var body: some View { VStack { Text("Text1") EmptyView() .frame(height: 20) .foregroundColor(.blue) Text("Text2") Spacer() .frame(height: 20) Text("Text3") } } } EmptyView의 사용처 아무런 뷰를 사용하고 싶지 않을때 선언 Toggle에 label이라는 파라미터에 EmptyView()를 넣어서 label을 사용하지 않는다는..
* StarScream을 통해 WebSocket 간단하게 사용 방법은 이전 포스팅 글 참고 WebSockets이란? 클라이언트와 서버 사이의 동적인 양방향 연결 채널(Socket Connection)을 구성 WebSockets API를 통해 서버로 메세지를 보내면, 별다른 API 요청 없이 응답을 수신 HTTP 통신 방법 vs WebSocket 통신 방법 WebSockets 프로토콜: 접속에만 HTTP를 사용하고 그 후 통신은 WebSockets 독자적인 프로토콜을 사용 WebSockets은 header가 작기 때문에 overhead가 적은 장점이 존재 ex) slack의 실시간 채팅, 금융앱에서 실시간 주가 현황 WebSocket 구현 싱글톤으로 구현하기 위해 shared를 선언하고 url을 외부에서 ..
Base64란? Base64는 64진법으로 (=8비트) 이루어진 데이터 ASCII 영역의 문자들로만 이루어진 문자열로 바꾸는 인코딩 방식 * 인코딩: 파일에 저장된 형태, 형식을 데이터 표준화 및 처리 속도 향상을 위해 다른 형태로 변환하는 처리 Base64인코딩은 24bit의 buffer를 생성하여 바이트 데이터를 넣은 뒤, 6bit 단위로 잘라 ASCII 문자로 변환 Base64 특징 장점 통신과정에서 바이너리 데이터의 손실을 막기 위함 (base64없이 ASCII인코딩만 사용할때, ASCII는 7 bit eonciding이지만 1bit를 처리하는 방식이 시스템별로 상이하기 때문에 데이터의 손실할 수 있는 가능성이 존재) 일부 제어 문자 (\n와 같은 문자)의 경우 시스템 별로 다른 코드값을 가지고 ..
TimerView 입력한 초만큼 테두리에 stroke가 칠해지는 뷰 구현 아이디어 UIBezierPath를 이용하면 뷰의 테두리 부분의 위치를 쉽게 구할 수 있는 점 CAShapeLayer를 이용하면 테두리의 width값과 fillColor, strokeColor, 거기에다가 CABasicAnimation의 "strokeEnd" 애니메이션도 쉽게 사용이 가능 사용하는쪽에서는 단순히 아래에서 구현할 TimerView를 addSubview하고 start(duration:)하여 사용 ex) TimerView를 사용하는쪽 // ViewController.swift private func addTimerView(on subview: UIView) { let timerView = TimerView() subview..
1. Kingfisher 프레임워크 (이미지 캐싱, 이미지 로드) - 사용 방법 2. Kingfisher 프레임워크 (이미지 캐싱, 이미지 로드) - .processor, progressiveJPEG 옵션 .processor 옵션 URL로부터 이미지를 불러올때 보통 down sampling이라는 것을 통하여 이미지 그대로 불러오는게 아닌, 필요한 사이즈만큼 샘플링해서 가져오는데, 이때 이 기능을 사용하는 옵션 down sampling할때 얼마만의 크기가 필요한지 알아야하는데, 아이폰은 기기의 해상도별 픽셀의 수가 다르므로 UIScreen.main.scale을 이용 ex) UIScreen.main.scale값 - iPhone7은 2.0, iPhone 13 Pro는 3.0 ex) 예제 코드 imageURLS..