Swift에서 Closure는 뭘까?
Language/Swift2024. 6. 29. 12:01Swift에서 Closure는 뭘까?

Closure코드에서 전달하고 사용할 수 있는 독립된 기능 블록self-contained blocks of functionality이다. 다른 언어의 클로저, 익명 함수, 람다 및 블록과 유사하다.// 일반적인 표현식{ () -> in }// closure: ascendingOrder let ascendingOrder: (Int, Int) -> Bool = { (lhs, rhs) -> Bool in return lhs value capture클로저의 주변 context의 상수와 변수를 capture 할 수 있다. 더 이상 존재하지 않더라도 클로저 본문 내에서 값을 참조하고 수정할 수 있습니다.접근할 수 있는 상수와 변수들을 close over 한다.incrementer 클로저는 total과 i..

새로워진 Swift 6 (WWDC24: What's new in Swift)
Language/Swift2024. 6. 19. 00:58새로워진 Swift 6 (WWDC24: What's new in Swift)

10년 간의 Swift 변천사2014년: Swift의 시작2015년: 오픈 소스로 전환, Linux에서도 사용 가능2016년: Swift 3, SPMSwift Package Manager 도입2017년: Swift 4, 최신 버전으로 마이그레이션하지 않아도 되는 기능이 추가2018년: Generics의 개선과 조건부 적합성Conditional Conformances 도입// 조건부 적합성extension Array: Comparable where Element: Comparable { static func , rhs: Array) -> Bool { // 비교 로직 }}2019년: SwiftUI, ABIApplication Binary Interface 도입2020년: Windows 포트가 s..

flutter, riverpod으로 상태 관리하기
Language/Flutter2024. 6. 18. 17:26flutter, riverpod으로 상태 관리하기

상태 관리 패키지라고 생각했지만, 문서에서는 Flutter/Dart를 위한 반응형 캐싱 프레임워크라 지칭하고 있습니다.선언적 프로그래밍과 반응형 프로그래밍을 사용하여 로직의 상당 부분을 처리할 수 있습니다. 최신 응용 프로그램에는 사용자 인터페이스를 렌더링하는 데 필요한 모든 정보가 거의 제공되지 않고 대신 데이터를 서버에서 비동기적으로 가져오는 경우가 많습니다. 비동기 코드를 사용하는 것은 어렵기도 하고 상태 변수를 생성하고 변경 시 UI를 갱신하는 것이 제한적이기에 Riverpod이 등장하게 되었습니다. 상태 관리를 용이하게 해주는 도구로 어플리케이션 내에서 여러 위젯이 동일한 상태에 접근해야 할 때 유용합니다.패키지 설치riverpod 패키지를 사용하기 위해서는 flutter_riverpod과 ri..

Flutter, Chopper로 TMDB API 호출해서 영화 정보 받아오기
Language/Flutter2024. 6. 11. 00:27Flutter, Chopper로 TMDB API 호출해서 영화 정보 받아오기

ChopperAPI Endpoint를 쉽게 정의할 수 있는 코드를 생성합니다.request의 header를 추가하고 URL을 제공하며 처리하는 요청에 interceptor와 converter를 적용하는 역할도 담당합니다.설치24년 6월 10일 기준으로 설치를 위해 아래와 같이 추가했습니다.# pubspec.yamldependencies: chopper: ^8.0.0dev_dependencies: build_runner: ^2.4.9 chopper_generator: ^8.0.0Chopper 코드 생성ChopperService 클래스를 확장하는 추상 클래스에서 @ChopperApi annotation 사용@Get 말고도 다른 요청들도 있습니다.@Post@Put@Patch@Delete@Head// mo..

[Swift] Reactive Programming Combine - Resource
Language/Swift2024. 5. 29. 22:42[Swift] Reactive Programming Combine - Resource

Resource를 관리할 수 있는 2가지 연산자가 있습니다.sharemulticastshareupstream에서 받은 요소를 여러 subscibers에게 공유하는 Publisher.Share 클래스의 인스턴스입니다.연산자는 반환한 publisher는 여러 subscribers를 지원합니다.subscribers는 publisher로부터 변경되지 않은 요소와 완료 상태를 받습니다. Publisher.Share는 사실상 Publishers.Multicast 와 PassthroughSubject의 조합으로 암시적으로 autoconnect이 포함되어 있습니다. 처음 들어오는 subscriber와 함께 한 번 구독합니다. upstream에서 받은 값을 첫 subscriber 및 이후 구독하는 subscribers에..

[Swift] Reactive Programming Combine - Debugging
Language/Swift2024. 5. 19. 22:00[Swift] Reactive Programming Combine - Debugging

print모든 publisher 이벤트에 대한 log 메시지를 출력합니다.이벤트가 publisher를 통과하는지 확실하지 않을 때 사용하는 연산자입니다. print에는 TextOutputStream 객체를 받는 매개변수가 있습니다.이를 사용하여 원하는 형태의 로그를 출력할 수 있습니다. class TimeLogger: TextOutputStream { private var previous = Date() private let formatter = NumberFormatter() init() { formatter.maximumFractionDigits = 5 formatter.minimumFractionDigits = 5 } func write(_ string: String) { ..

[Swift] Reactive Programming Combine - Networking
Language/Swift2024. 5. 16. 22:59[Swift] Reactive Programming Combine - Networking

NetworkingCodabletryMap 내에서 JSON 디코딩하면 작동하지만 Combine에서 사용구를 줄이는 도움이 되는 연산자를 제공합니다.dataTaskPublisher(for:)은 튜플을 반환하므로 데이터 부분만 반환하기 위해 map을 사용하고 decode(type:decoder:) 연산자를 사용해야 합니다. tryMap에서 매번 생성하는 것과는 달리 publisher를 설정할 때, JSONDecoder를 한 번만 인스턴스화합니다.let subscription = URLSession.shared .dataTaskPublisher(for: url) .tryMap { data, _ in try JSONDecoder().decode(MyType.self, from: data)..

[Swift] Reactive Programming Combine - 7: Sequence
Language/Swift2024. 5. 16. 14:39[Swift] Reactive Programming Combine - 7: Sequence

Sequence Operatorsminmin 연산자를 사용하면 publisher가 방출한 최소값을 찾을 수 있습니다.최소값을 알기 위해서 publisher가 .finish 완료 이벤트를 보낼 때까지 기다립니다. 값이 Comparable을 준수하지 않는다면 min(by:)를 사용하면 됩니다.enum Rank: Int { case ace = 1, two, three, four, five, six, seven, eight, nine, ten, jack, queen, king}let cards: [Rank] = [.five, .queen, .ace, .eight, .king]cancellable = cards.publisher .min { return $0.rawValue  maxmin..

image