- 문서 - 문서 ⭐️- WWDC 23 > Write Swift macros 📝 Assisted by GPT [1] 매크로 템플릿 만들기 Xcode > New > Pacakge > Swift Macro 선택해서 매크로 템플릿을 만들 수 있음. 커맨드라인으로도 가능한데, 아래 명령어를 실행시키면 됨. swift package init --type macro 만들어보면 기본적으로 ㄴ dependency 로 swift-syntax 가 걸려있음.ㄴ WWDC 에서 소개하는 stringify 매크로의 선언, 구현, 예제, 테스트 코드 들어가 있음. [2] 매크로 유형 일단 크게 두가지 1️⃣ Freestanding Macros• 코드 블록 외부에서 동작.• 예: 디버깅 정보를 자동으로 추가..
✓ SE-0431 @isolated(any) Function Types 📝 Assisted by GPT [1] @isolated(any) @isolated(any) 은 swift 6 에 추가된 attribute 입니다. (function only)임의의 (하지만 정적으로 알 수 없는) 격리를 가진 함수를 표현할 수 있습니다. Task 에도 반영됨! [2] @isolated(any) 도입 배경 Task 이니셜라이저는 () async throws -> () 타입의 불투명 값 (opaque value) 을 받습니다. 그러나 이 값에서 격리를 동적으로 복구할 수 없기 때문에, 이니셜라이저는 해당 작업을 global concurrent executor 에서 시작할 수밖에 없습니다. 만약 이니셜라이..
- [Swift] Sendable 을 먼저 읽고 오시길 추천드립니다. - Swift 6 기반의 글입니다.[1] @unchecked GPT 의 설명Swift에서는 Sendable이라는 프로토콜을 통해 값이 스레드 간 안전하게 공유될 수 있는지를 나타내는데, 기본적으로 Sendable 프로토콜을 구현한 타입은 스레드 안전해야 합니다. 하지만, @unchecked를 사용하면 이 안전성 검사를 생략하고 강제로 Sendable을 준수하는 것으로 표시할 수 있습니다.예를 들어, @unchecked Sendable을 사용하면 Swift 컴파일러는 이 타입을 Sendable로 인식하지만, 실제로는 스레드 안전하지 않을 수 있음을 경고 없이 허용합니다. struct SomeType: @unchecked Sendable ..
- WWDC 23 > What’s new in Swift : 작년에 소개됨 (Swift 5.9, 제네릭 지원 X) - WWDC 24 > Consume noncopyable types in Swift : 올해 별도의 세션이 생김 (Swift 6, 제네릭 지원) - SE-0390 Noncopyable structs and enums [1] Noncopyable - Noncopyable 은 copy 가 불가능한 타입임을 나타냄 (struct, enum 에서 사용가능) - 말할 때는 Noncopyable, code syntax 로는 ~Copyable - copy 가 불가능하다는 것이 7번 라인이 불가능하다는 뜻이 아니라, copy 를 한번 하고 나면 ownership이 이전되어서 원본은 못쓰고 복사본만..
Swift 6 에서 'Typed throws' 를 사용할 수 있다. - Swift Proposal: SE-0413- WWDC 24 > What’s new in Swift [1] 개념 AS IS기존의 에러 처리 방식이다. catch 블럭에 전달되는 에러는 type erased 되기 때문에 이런 식으로 구체 타입 체크를 했다. 이런 방식을 'UnTyped throws' 라고 한다. TO BE 이제 'Typed throws' 방식도 지원된다! 이렇게 function 이 throw 할 에러의 구체타입을 지정할 수 있다. (하나의 구체 타입만 사용한다면) 그럼 type erasure 가 안되고catch 블럭으로 들어오는 에러는 구체타입이다. [2] 실습 [3] 참고 1) API 에서 t..
[1] AsyncSequence - iterator 를 통해 elements 에 접근하는 Sequence 와 동일한 개념. 대신 asynchronous 하게 element 를 접근한다는 점이 Sequence 와 다름. 영어가 더 깔끔한 듯.. ? ‘AsyncSequence is a protocol which resembles Sequence and allows you to iterate over a sequence of values asynchronously.’ - iterator 의 next() 를 호출하거나 for await loops 를 사용해서 elements 에 접근할 수 있음 - AsyncSequence 프로토콜의 requirement 를 간략히 적어보자면 다음과 같음 protocol As..
[1] @TaskLocal 이란 ? @TaskLocal 은 특정 Task 와 Child Tasks 들끼리 값을 공유할 수 있게 해주는 프로퍼티 래퍼입니다. 이 값은 특정 Task 랑 Child Tasks 에만 국한되어서 전파됩니다. 즉 상위 Task 및 다른 독립적인 Task 에는 영향을 주지 않습니다. @TaskLocal 를 통해 전역상태를 피하면서도, 관련된 작업들 간에 상태를 안전하게 공유할 수 있습니다. [2] TaskLocal 선언하기 static 이나 global 프로퍼티로 선언되어야합니다. (global 은 Swift 6 이상부터 가능하다고 하네요) [3] TaskLocal 에 값을 바인딩 하기 task-local 에 직접적으로 value 를 set 할 수 없습니다. ..
☑️ dynamic-callable 간단 설명 @dynamicCallable 은 객체가 함수처럼 동작할 수 있도록 만들어준다. 쉽게 말하면, 해당 객체에 대해 함수 호출 연산자 ()를 사용할 수 있게 해준다. 이를 통해 동적으로 호출되는 동작을 구현할 수 있다.어떤 객체의 호출을 일반화하거나, 다양한 유형의 인자를 처리하는 등의 상황에서 유용하다. [1] 수학연산 @dynamicCallablestruct DynamicMultiplier { func dynamicallyCall(withArguments args: [Int]) -> Int { return args.reduce(1, *) }}let multiplier = DynamicMultiplier()multiplier(1,..
KeyPath 를 SwiftUI 쪽에서 자주 쓰면서 Swift 코드에도 자주 사용하고 싶어서 정리 및 useful example 을 모아두려고 한다. 사실.. 예를들어 map(\.xx) 이런 코드 많이 축약됐네~ 이런 느낌도 잘안들고 익숙하지도 않아서 잘안썼는데 앞으로는 의도적으로 더 많이 써보고 싶음. [참고자료] - Swift Docs > Key-Path Expressions - KeyPath 구현 [1] Key Path 정리 1. 백슬래쉬를 쓰는 이런 Key-Path Expression 은 컴파일 타임에 KeyPath class 의 instance 로 교체된다. \. 2. 모든 타입에 subscript(keyPath:) 가 구현되어있다. 이 서브스크립트에 keypath 를 넘기며 사용하면 된다. s..
Collection 문서를 보면 Time Complexity 가 두개로 나온 부분이 많은데요, 예를들어 1) randomElement() 2) distance(from:to:) 3) count ✓ RandomAccessCollection = 효율적인 random-access index 순회를 지원하는 콜렉션 ✓ BidirectionalCollection = 양방향 (forward, backward) 순회를 지원하는 콜렉션 이렇게 두개의 콜렉션이 있는데, Expected Performance 에 잘 나와있는 것 처럼 bidirectional collection 는 전체 collection 을 순회해서 카운팅 해야하므로 O(1) 의 시간복잡도를 가질 수 없기 때문입니다. 각 콜렉션 문서에서도 차이를 잘 볼 ..
- Total
- Today
- Yesterday
- Flutter getter setter
- flutter build mode
- Sketch 누끼
- flutter 앱 출시
- ribs
- 장고 Custom Management Command
- github actions
- Flutter Spacer
- 플러터 얼럿
- Django Heroku Scheduler
- Django Firebase Cloud Messaging
- cocoapod
- drf custom error
- Flutter 로딩
- Flutter Clipboard
- Django FCM
- Flutter Text Gradient
- flutter deep link
- PencilKit
- Watch App for iOS App vs Watch App
- METAL
- 구글 Geocoding API
- ipad multitasking
- Dart Factory
- DRF APIException
- Python Type Hint
- 장고 URL querystring
- 플러터 싱글톤
- SerializerMethodField
- flutter dynamic link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |