일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컴퓨터그래픽스
- Protocol
- dispatchqueue
- 스유
- Swift
- 대외활동
- 영남대
- uikit
- 운영체제
- 멋쟁이사자처럼
- 멋사
- 웹
- spritekit
- TCA
- composable architecture
- 리액트
- 스위프트
- widget
- cs
- swift concurrency
- c++
- ReactorKit
- 네트워크
- 위젯킷
- SwiftUI
- widgetkit
- 문법
- 후기
- 알고리즘
- 백준
- Today
- Total
목록앱 (115)
맛동산이
우선 GeometryReader가 도큐먼트에 쓰여있는 정의를 번역하자면, GeometryReader는 그 자체로 ‘View’이며, container 안 View 스스로의 크기와 위치를 함수로 정의한다고 소개되어있다.GeometryReader를 사용하지 않는 코드struct ContentView: View { @State var isPresented = false var body: some View { VStack { Text("this is View") .padding() RightView() } } } struct RightView: View { var body: some View { Rectangle().foregroundColor(.blue) } }처음뷰는 기존의 VStack을 사용하는 방법과 동일..
Task는 프로그램의 일부를 비동기적으로 실행할 수 있는 하나의 작업 단위이다. Task는 다음과 같은 특징을 가진다. 순차적 (Sequential) 비동기적 (Asynchronous) 독립적 (Self-contained) Task를 생성할때 클로저를 통해서 해당 Task가 수행할 작업을 정의하게 된다. 즉 async한 작업들을 전부 Task블록을 이용해서 사용해주면 된다. 또한 해당 블록안에 있는 작업이 비동기라는것을 명시적으로 알려준다. Task 사용 예제 func fetchImage() async { do { guard let url = URL(String: ) else { return } let (data, _) = try await URLSession.shared.data(from: url, d..
Async와 await을 사용하기1. 기존의 코드override func viewDidLoad() { super.viewDidLoad() self.getData { data in self.decode(data: data) { contents in print(contents) // "~~~~ } } } func getData(completion: (Data) -> Void) { let url = URL(string: "https://zeddios.tistory.com")! let data = try! Data(contentsOf: url) completion(data) } func decode(data: Data, completion: (String) -> Void) { let contents = Stri..
actor는 swift에서 새로이 만든 타입이었다. 그렇다면 Actor는 무었일까?ActorActor는 actor타입이 채택하고 있는 프로토콜이다. Actor프로토콜은 AnyActor과 Sendable을 상속하고 있다. 따라서 Actor은 Sendable을 강제적으로 채택하게 하는 프로토콜이라는것 SendableSendable이란, 주어진 값이 concurrency 환경에서 안전하게 데이터가이동된다는 뜻, 이전에 말했던, Actor-isolation처럼 data race가 일어나지 않으려면 데이터가 변경되지 않거나, 공유되지 않는 경우 data race는 발생하지 않는다. 이를 보장하는 프로토콜이다. Sendable채택Sendable을 채택하려면, 주어진 타입의 값이 concurrent code에서 안전..
Actor의 등장배경Actor은 동시성 프로그래밍(concurrency programming)에서 안전한 스레드 관리를 위해서 발생되었다. Concurrency programming의 가장큰 문제중 하나는 data race이다. 바로 여러스레드가 동시에 하나의 데이터에 접근하게 되는 경우이다. 하지만 이러한 문제를 Structed Concurrency에서도 data race를 방지하기 위해 컴파일러 단위부터 검사해주고 있으며, 그걸 가능하게 하는 것이 바로 Actor다.class Human {} 을 actor Human {} 으로 사용하면 된다. 즉 actor Human { var name: String var age: Int init(name: String, age: Int) { self.name = ..
기존의 에러 핸들링(completionHandler)기존의 escaping closure의 completionhandler를 통해서 비동기처리를 해줄때, error처리가 상당히 어려워진다.예시로써func fetchData(completion: @escaping (Data?, Error?) -> Void) { //... } fetchData { (data, error) in guard error == nil else { handleError(error!) } guard let data = data else { return } completion(data) }이러한 코드에서 실제로 예외처리가 가능한 경우의 수는 다음과 같다. Data, Error : True, FalseData, Error : True, T..
associatedtypeassociatedtype은 프로토콜에서 지네릭을 사용하기 위해서 사용하는 문법이다. Generic이란지네릭이란, 타입에 의존하지 않고 범용적으로 코드를 작성할때 사용하는 방식으로, 실제 함수가 호출될 때 해당 매개변수의 타입으로 대체되는 Placeholder를 의미한다. 하지만 기존의 프로토콜에서 지네릭을 사용하고 싶다면 associated type을 사용하라고 가이딩 한다. 실제로 사용하려면 이렇게 하면된다. 이거를 실제 채택한 클래스에서 다음과 같이 사용하면된다. protocol someProtocol { associatedtype someType func getSomeType(t: someType) } class Adapt: someProtocol { typealias s..
GCD란, iOS에서 멀티코어 프로세스에서 멀티스레딩을 지원하게 해주는 애플이 개발한 기술이다. GCD를 사용하기 위해서는 Dispatch라는 프레임워크를 사용하면 된다.Dispatch 프레임워크에는 DispatchQueue, DispatchWorkItem과같은 다양한 클래스가 존재한다.이를 통해서 Dispatch Queue 에 작업을 보내면 그에 따라 스레드를 적절히 생성해서 실행하고 작업이 종료되면 스레드를 GCD가 자동으로 제거한다. Serial, Concurrent serial은 단일 스레드 환경concurrent는 다중스레드 환경// Serial Queue DispatchQueue(label: "Serial") DispatchQueue.main // main은 전역적으로 사용되는 Serial D..

애니메이션 처리를 하던 도중 계속해서 애니메이션이 @State 의 변경에도 불구하고 변경되지 않는 것을 확인하엿다. 왜그런가 해서 다른사람들이 처리한 애니메이션을 봤는데 다른사람은 AnimationHash라는 클래스를 설정해서 애니메이션이 변경되도록 처리해주어서 해당 코드를 분석한 결과 Identifiable이라는 프로토콜을 채택하는것으로 문제를 해결했다고 생각이 들어서 이에 대해서 정리해본다. identifiableidentifiable이란 프로로토콜로, instance 가 stable identity를 가지도록 하는 프로토콜이다.여기에서 말하는 stable identity란, being able to see yourself as same person in the past, and future로, 생성..