일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- arkit
- tableView
- SnapKit
- 패스트캠퍼스
- MVVM
- raywenderlich
- TCA
- Swfit
- visionOS
- Xcode
- 프로그래머스
- rxcocoa
- Lv2
- Kuring
- node.js
- SwiftUI
- realm
- XCTest
- ios
- WWDC24
- combine
- 백준
- UIKit
- RxSwift
- designpattern
- reactorkit
- swift
- CollectionView
- Flutter
- BOJ
Archives
- Today
- Total
lgvv98
Swift @TaskLocal 본문
Swift @TaskLocal
- TaskLocal 값은 Task의 컨텍스트 내에서 바인딩되고 읽을 수 있는 값
- Task와 함께 암묵적으로 전달되며, TaskGroup이나 `async let`으로 생성된 하위 Task에서도 접근할 수 있음
TaskLocal 선언하기
enum Example {
@TaskLocal
static let traceID: TraceID?
}
// Global task local properties are supported since Swift 6.0:
@TaskLocal
var contextualNumber: Int = 12
Swift 6.0부터 global로 사용 가능함.
global에 대해서 더 자세히 알고 싶다면 댓글(간략정리) 혹은 아래 포스팅 참고.
https://rldd.tistory.com/612
데이터를 넣어주고 싶을 경우에는 아래 형태로 사용.
TaskLocalExample.$traceID.withValue("음악가게") {
...
}
아래 코드를 살펴보면서 TaskLocal 이해하기
우선 아래 코드의 결과가 어떻게 나올지 추측해보기.
정답은 내려서 확인 가능.
func swift5_10() {
TaskLocalExample.traceID = "음악"
print("✅ 1: ",TaskLocalExample.traceID)
TaskLocalExample.$traceID.withValue("음악가게") {
print("✅ 2: ", TaskLocalExample.traceID)
Task {
print("✅ 3: ", TaskLocalExample.traceID)
Task {
print("✅ 4: ", TaskLocalExample.traceID)
}
Task.detached {
print("✅ 5: ", TaskLocalExample.traceID)
}
}
}
print("✅ 6: ",TaskLocalExample.traceID)
Task {
print("✅ 7: ",TaskLocalExample.traceID)
}
}
아래 코드를 살펴보면서 TaskLocal 이해하기 (정답)
왜 이렇게 정답이 나오는지 분석
- 1번: 아직 할당된 값이 없어서 nil
- 2번: withValue에 값이 할당되어서 Optional("음악가게")
- 3번: 구조화된 동시성의 내부의 Task이므로 Optional("음악가게")
- 4번: 구조화된 동시성의 내부의 Task이므로 Optional("음악가게")
- 5번: detached로 되어 있어서 부모와 격리 되므로 nil
- 6번: withValue의 범위를 벗어났으므로 nil
- 7번: withValue의 범위를 벗어났으므로 nil
순서: Task의 순서는 보장되지 않음. 그래도 흐름은 어느정도 보장
(참고)
https://developer.apple.com/documentation/swift/tasklocal
'apple > Docs, iOS, Swift' 카테고리의 다른 글
Library vs Framework 정리 (1) | 2024.08.29 |
---|---|
Swift KeyPath 정리 (0) | 2024.08.28 |
SwiftUI .swipeActions not working (0) | 2024.08.28 |
iOS Translation Framework (0) | 2024.08.28 |
swift @_spi (System Programming Interfaces) (0) | 2024.08.20 |
Comments