일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 영남대
- 백준
- 후기
- 리액트
- TCA
- widgetkit
- 위젯킷
- SwiftUI
- composable architecture
- 멋사
- 1일1알골
- Protocol
- 멋쟁이사자처럼
- spritekit
- dispatchqueue
- 웹
- 컴퓨터그래픽스
- 네트워크
- 스위프트
- 스유
- uikit
- 알고리즘
- 문법
- 대외활동
- 운영체제
- cs
- c++
- widget
- swift concurrency
- Swift
- Today
- Total
목록SwiftUI (34)
맛동산이
Dependency란dependency란 네트워크 통신, 파일 엑세스, 타이머, 스레드 등 타입이나, 함수로 이루어진 컨트롤할수 없는, 시스템 외부에서 일어나는 상호작용을 의미한다.이러한 디펜던시를 제대로 컨트롤하지 못하면 예상치 못한 사이드이펙트가 발생할수 있다.TCA는 https://github.com/pointfreeco/swift-dependencies 라는 라이브러리를 사용하고 있으며, 해당 라이브러리의 장점은 다음과 같다.읽기쉽고, 테스트 코드짜기 쉬움swiftui 프리뷰와 동작을 잘하며, simulator를 통해서도 동작을 잘함3rd party 라이브러리, (파이어베이스 같은) 것을 연동할때 컴파일 타임이 적게 든다.TCA 에서 사용할수 있는 dependency Value값은 다음 페이지에서..
기본적인 비동기var body: some ReducerOf { Scope(state: \\.login, action: \\.login) { Login() } Reduce { state, action in switch action { case .test1: return .run { 여기 안에서 비동기를 처리 해준다. } case .fetch(.success): return .none case .fetch(.failure): return .noneTCA에서는 비동기 처리를 해줄..
💡 TCA는 단방향 아키텍쳐로, 상태관리가 용이하고, 데이터 흐름이 명확하게 정의되어 있기 때문에 단방향으로 이해하기 쉽습니다.TCA 의 장점모듈화: TCA는 애플리케이션을 작은 모듈로 나누어 관리할 수 있도록 도와줍니다. 각 모듈은 독립적으로 테스트하고, 유지보수할 수 있어 코드의 가독성과 재사용성이 향상됩니다.예측 가능성: 상태의 변화가 명확하게 정의되어 있어, 애플리케이션의 동작을 예측하기 쉽습니다. 모든 상태 변화는 액션을 통해 이루어지며, 이는 디버깅과 유지보수를 용이하게 만듭니다.테스트 용이성: TCA는 테스트를 쉽게 할 수 있도록 설계되었습니다. 상태, 액션, 리듀서를 독립적으로 테스트할 수 있어, 각 모듈의 동작을 검증하는 데 유리합니다.상태 관리: TCA는 중앙 집중식 상태 관리를 제공..
위젯 동작과, 내용에 관해서는 이전 글을 참고하시길 바랍니다.간단하게 설명하자면 위젯에서는EntryProviderWidgetView로 크게 나누게 되며, Provider가 Entry를 Timeline에 맞춰서 새로 생성하여 배열에 담고, 해당 타임라인 시간에 맞춰서 entry배열에 담긴 화면을 그리는것이 위젯의 기본 동작이다.iOS 17버전 이전에서는 위젯에서는 위젯을 눌러서 앱을 실행하는 동작 이외에는 어떠한 버튼 동작이 불가능했다.하지만 iOS17 이상에서는 위젯에 버튼액션이 가능한데 이를 정리해보고자 한다.AppIntent2023 button 을 이해하기 위해서는 우선 appIntent라는것에 대해서 이해해야한다.간략하게 말하자면, appIntent는 시스템에서 앱의 기능이나 컨텐츠를 사용할수 있도..
위젯 동작과, 내용에 관해서는 이전 글을 참고하시길 바랍니다. 간단하게 설명하자면 위젯에서는 Entry Provider Widget View 로 크게 나누게 되며, Provider가 Entry를 Timeline에 맞춰서 새로 생성하여 배열에 담고, 해당 타임라인 시간에 맞춰서 entry배열에 담긴 화면을 그리는것이 위젯의 기본 동작이다. iOS 17버전 이전에서는 위젯에서는 위젯을 눌러서 앱을 실행하는 동작 이외에는 어떠한 버튼 동작이 불가능했다. 하지만 iOS17 이상에서는 위젯에 버튼액션이 가능한데 이를 정리해보고자 한다. AppIntent 2023 button 을 이해하기 위해서는 우선 appIntent라는것에 대해서 이해해야한다. 간략하게 말하자면, appIntent는 시스템에서 앱의 기능이나 컨..
Combine을 처음 공부할때 가장힘들었던점 콤바인, rx모두 같은 맥락으로 처음 공부할때 힘든점은 그래서 subscriber, publisher가 뭔지는 알겠는데 어떻게 생성하는가? 이다. 따라서, 최대한 쉽게 나만의 해석을 하고 이해하여서 설명해보려고 한다. Combine을 사용하는 이유 우선 콤바인을 사용하는 이유를 이해 해야하는데, 콤바인을 사용하는 이유는 공식문서에 나와있다. 하지만 내가 생각하는 combine이나 rx를 사용하는 이유는 바로 데이터 바인딩을 하기 위함이다. 데이터 바인딩을 한다는 말은, 뷰에 있는 어떠한 컴포넌트(textfield, button, text..)에 이벤트 감지를 하고, 감지를 통해서 다시 어떠한 값의 변경을 이끌어 내는것을 의미한다 나는 이러한 방법에서 combi..
리액터킷은 Flux와 Reactive Programming의 조합으로 만든 프레임워크이다. 유저액션과, 뷰 상태는 옵저버블(rx)스트림을 통해서 각각의 레이어에 전달된다. 여기에서 중요한점! 뷰는 액션만을 방출한다. 리액터는 상태만을 방출한다. 이것을 통해서 단방향 구조를 형성한다. 리액터킷의 특징 테스터블하다 뷰에서 로직을 분리하기 때문에(리액터를 통해서) 테스터블하다. 특정뷰에서만 채택이 가능 전체 아키텍쳐를 사용하지 않고 필요한 부분만 채택가능하다는 장점 타이핑이 적다 간결하게 코딩할수있다는 장점이 있다. View 리액터킷에서 뷰는 뷰 컨트롤러이다. 역할은 다음과 같다. 유저인풋을 받아들이고 이를 액션스트림에 추가한다. view state를 각 UI component에 추가한다.(bind) 뷰는 어..
Concurrent라는 뜻 iOS에서는 time Slicing을 하고 있다. (당연한 이야기) 따라서 single Thread라면, context switching을 통해서 병렬적 작업을 muti Thread라면 parallelism하게 동작한다. DispatchQueue DispatchQueue는 GCD의 쓰레드의 관리를 위한 객체가 존재함 해당 객체의 존재는 serial 과 concurrent queue두개가 존재 serial : task의 시간을 보장해주며, 순차적으로 진행 concurrent : 동시에 여러 task를 수행할수 있음 기본적으로 serial임. let queue = DispatchQueue(label: "start") queue.async { for i in 0...5 { sleep..
rethrows란 함수를 파라미터로 받는 함수에서 에러가 발생할수 있음을 의미하는 키워드이다. 즉 최소 한개 이상의 에러를 throw하는 함수를 매개변수로 받아야 한다. 간단한 예제는 다음과 같다. enum Errors: Error { case someError } func throwErrors(about value: Int) throws -> Int { if value == 0 { throw Errors.someError } return value } func checkThrow(completion: (Int) -> Int ) { do { try throwErrors(about: 0) } catch (let error) { print(error.localizedDescription) } } checkT..