Async/Await (9)
AsyncSeqeunce
지진정보를 가지고 해보려한다.
1. without AsyncSequence
우선 여기서 특이점이라면
extension URL {
func allLines() async -> Lines {
Lines(url: self)
}
}
struct Lines: Sequence {
let url: URL
func makeIterator() -> some IteratorProtocol {
let lines = (try? String(contentsOf: url))?.split(separator: "\n") ??...
Async/Await (8)
Concurrent Tasks
이번엔 동시에 작업을 생성하는 방법에 대해 다뤄본다.
Async let
이 작업은 여러 하위 작업(Child Tasks)을 가질 수 있다.
하위 작업은 async let 구문을 사용하여 생성되며, 결국 async let은 변수와 같은 역할을 한다.
이를 통해 이러한 작업이 동시에 실행될 수 있다.
Task Group
반면, 동적 데이터가 있고 몇 개의 동시 작업을 실행해야 할지 알 수 없는 상황에서는 Task Group이 더 적합할 수 있다.
Task Group을 사용하면 작업 내에서...
Async/Await (7)
Structured Concurrency ?
WWDC21에 해당 관련 설명이 있다.
한번 봐두는것도 좋을듯
아래는 WWDC에 나온 리소스 링크
Structured Concurrency
Docs
async let
우선 Structured Concurrency는 아래와 같이 있다.
Async let
Task Group
Unstructured Tasks
Detached Tasks
시나리오: Credit Score를 사용하여 APR 계산
enum NetworkError: Error {
case badUrl
case decodingError
}
struct CreditScor...
Async/Await (6)
이제 공부한 내용을 새로운 프로젝트를 통해 적용해보도록 한다.
여기선 News App을 만들것이고
URLSessoin Async/Await
Continuation
DispatchQueue to MainActor
이렇게 3가지를 적용해본다.
현재 프로젝트에서
func fetchSources(url: URL?, completion: @escaping (Result<[NewsSource], NetworkError>) -> Void) {
guard let url = url else {
completion(.failure(.badUrl))
r...
Async/Await (5)
Async/Await
Apple이 제공하는 Async/Await 지원 API
Apple은 여러 API에서 이미 async/await을 지원한다:
URLSession
HealthKit
Notification
Core Data
MusicKit
기존 작성된 코드들의 문제점
기존에 작성한 코드가 completion handlers나 callbacks에 의존하고 있다면, 이를 async/await 방식으로 변환하는 것이 필요하다.
func getPosts(completion: (Result<[Post], Never>) -> Void) {
// get the posts
...
Async/Await (4)
MVVM 디자인 패턴 적용하기
Async_Await (2)에서 했던 프로젝트를 이어서 진행한다.
구현할 매커니즘에 대해 간략하게 표현하면 다음과 같다
Webservice 구현
Webservice 클래스 파일을 하나 만들어 준다.
그리고 기존에 구현했었던 getDate 함수를 옮겨준다.
class Webservice {
private func getDate() async throws -> CurrentDate? {
guard let url = URL(string: "https://ember-sparkly-rule.glitch.me/current-dat...
Async/Await (3)
이번 섹션은 MVVM에 대한 내용을 다루는듯 하다.
시작하기전 Design Pattern에 대해 먼저 다루고 시작한다.
Design Pattern ?
참고글이 너무 잘되어있어서 이걸 보면 좋을듯.
일반적으로 디자인 패턴이라고 하면
디자인 패턴은 소프트웨어 개발에서 자주 발생하는 문제를 해결하기 위한 모범 사례이다.
주로 클래스와 객체 간의 관계를 설명하며, 반복적으로 발생하는 문제를 해결하기 위한 검증된 접근 방식을 제공한다.
위의 이미지는 아래 참고글에서 가져왔다.
또다른 참고글도 봐두면 좋을듯
디자인 패턴의 특징
개발 속도 향상
미리 정의된 패턴을 활용함...
Async/Await (2)
Async/Await를 사용하여 날짜 가져오기
강의 흐름에 따라 정리를 해본다.
먼저, Async/Await 패턴은 Swift의 비동기 프로그래밍을 더욱 효율적이고 직관적으로 만드는 패턴이다. 이 패턴의 주요 장점은 다음과 같다.
코드의 가독성 향상: 비동기 코드를 동기 코드와 유사하게 작성할 수 있어 로직의 흐름을 쉽게 이해할 수 있다.
콜백 지옥 해결: 중첩된 콜백 대신 선형적인 코드 흐름을 사용하여 복잡한 비동기 로직을 간결하게 표현할 수 있다.
에러 처리 용이: try/catch 구문을 사용하여 비동기 작업에서 발생하는 에러를 효과적으로 처리할 수 있다.
출처
1. 기본 구성
우선 ...
631 post articles, 79 pages.