|
1 | 1 | # `ProgressReporter`: Progress Reporting in Swift Concurrency |
2 | 2 |
|
3 | | -* Proposal: SF-NNNN |
| 3 | +* Proposal: SF-0023 |
4 | 4 | * Author(s): [Chloe Yeo](https://github.com/chloe-yeo) |
5 | | -* Review Manager: TBD |
6 | | -* Status: **Pitch** |
| 5 | +* Review Manager: [Charles Hu](https://github.com/iCharlesHu) |
| 6 | +* Status: **Review Apr. 23, 2025...Apr. 30, 2025** |
| 7 | +* Review: [Pitch](https://forums.swift.org/t/pitch-progress-reporting-in-swift-concurrency/78112/10) |
| 8 | + |
7 | 9 |
|
8 | 10 | ## Revision history |
9 | 11 |
|
|
21 | 23 |
|
22 | 24 | ## Table of Contents |
23 | 25 |
|
24 | | -* [Introduction](#introduction) |
25 | | -* [Motivation](#motivation) |
26 | | -* [Proposed Solution and Example](#proposed-solution-and-example) |
27 | | - * [Reporting Progress (General Operations)](#reporting-progress-general-operations) |
28 | | - * [Reporting Progress (File-Related Operations)](#reporting-progress-file\-related-operations) |
29 | | - * [Advantages of using `Subprogress` as Currency Type](#advantages-of-using-subprogress-as-currency-type) |
30 | | - * [Interoperability with Existing `Progress`](#interoperability-with-existing-progress) |
31 | | -* [Detailed Design](#detailed-design) |
32 | | - * [`ProgressReporter`](#progressreporter) |
33 | | - * [`ProgressReporter.Properties`](#progressreporterproperties) |
34 | | - * [`Subprogress`](#subprogress) |
35 | | - * [`ProgressReporter.FormatStyle`](#progressreporterformatstyle) |
36 | | - * [`ProgressReporter.FileFormatStyle`](#progressreporterfileformatstyle) |
37 | | - * [Interoperability with Existing `Progress`](#methods-for-interoperability-with-existing-progress) |
38 | | - * [`ProgressReporter` \(Parent\) \- `Progress` \(Child\)](#progressreporter-parent---progress-child) |
39 | | - * [`Progress` \(Parent\) \- `ProgressReporter` \(Child\)](#progress-parent---progressreporter-child) |
40 | | -* [Impact on Existing Code](#impact-on-existing-code) |
41 | | -* [Future Directions](#future-directions) |
42 | | - * [ProgressView Overloads](#progressview-overloads) |
43 | | - * [Distributed ProgressReporter](#distributed-progressreporter) |
44 | | - * [Enhanced `FormatStyle`](#enhanced-formatstyle) |
45 | | -* [Alternatives Considered](#alternatives-considered) |
46 | | - * [Alternative Names](#alternative-names) |
47 | | - * [Introduce `ProgressReporter` to Swift standard library](#introduce-progressreporter-to-swift-standard-library) |
48 | | - * [Implement `ProgressReporter` as a Generic Class](#implement-progressreporter-as-a-generic-class) |
49 | | - * [Implement `ProgressReporter` as an Actor](#implement-progressreporter-as-an-actor) |
50 | | - * [Implement `ProgressReporter` as a Protocol](#implement-progressreporter-as-a-protocol) |
51 | | - * [Introduce an `Observable` Adapter for `ProgressReporter`](#introduce-an-observable-adapter-for-progressreporter) |
52 | | - * [Introduce Method to Generate Localized Description](#introduce-method-to-generate-localized-description) |
53 | | - * [Introduce Explicit Support for Cancellation, Pausing, Resuming of `ProgressReporter`](#introduce-explicit-support-for-cancellation-pausing-and-resuming-of-progressreporter) |
54 | | - * [Check Task Cancellation within `complete(count:)` Method](#check-task-cancellation-within-completecount-method) |
55 | | - * [Introduce totalCount and completedCount Properties as UInt64](#introduce-totalcount-and-completedcount-properties-as-uint64) |
56 | | - * [Store Existing `Progress` in TaskLocal Storage](#store-existing-progress-in-tasklocal-storage) |
57 | | - * [Add Convenience Method to Existing `Progress` for Easier Instantiation of Child Progress](#add-convenience-method-to-existing-progress-for-easier-instantiation-of-child-progress) |
58 | | - * [Allow for Assignment of `ProgressReporter` to Multiple Progress Reporter Trees](#allow-for-assignment-of-progressreporter-to-multiple-progress-reporter-trees) |
59 | | - * [Replace Count\-based Relationships between `ProgressReporter`](#replace-countbased-relationships-between-progressreporter) |
60 | | - * [Introduce Additional Convenience for Getting `Subprogress`](#introduce-additional-convenience-for-getting-subprogress) |
61 | | -* [Acknowledgements](#acknowledgements) |
| 26 | +- [`ProgressReporter`: Progress Reporting in Swift Concurrency](#progressreporter-progress-reporting-in-swift-concurrency) |
| 27 | + - [Revision history](#revision-history) |
| 28 | + - [Table of Contents](#table-of-contents) |
| 29 | + - [Introduction](#introduction) |
| 30 | + - [Motivation](#motivation) |
| 31 | + - [Proposed solution and example](#proposed-solution-and-example) |
| 32 | + - [Reporting Progress (General Operations)](#reporting-progress-general-operations) |
| 33 | + - [Reporting Progress (File-Related Operations)](#reporting-progress-file-related-operations) |
| 34 | + - [Advantages of using `Subprogress` as Currency Type](#advantages-of-using-subprogress-as-currency-type) |
| 35 | + - [Interoperability with Existing `Progress`](#interoperability-with-existing-progress) |
| 36 | + - [Detailed design](#detailed-design) |
| 37 | + - [`ProgressReporter`](#progressreporter) |
| 38 | + - [`ProgressReporter.Properties`](#progressreporterproperties) |
| 39 | + - [`Subprogress`](#subprogress) |
| 40 | + - [`ProgressReporter.FormatStyle`](#progressreporterformatstyle) |
| 41 | + - [`ProgressReporter.FileFormatStyle`](#progressreporterfileformatstyle) |
| 42 | + - [Methods for Interoperability with Existing `Progress`](#methods-for-interoperability-with-existing-progress) |
| 43 | + - [ProgressReporter (Parent) - Progress (Child)](#progressreporter-parent---progress-child) |
| 44 | + - [Progress (Parent) - ProgressReporter (Child)](#progress-parent---progressreporter-child) |
| 45 | + - [Impact on existing code](#impact-on-existing-code) |
| 46 | + - [Future Directions](#future-directions) |
| 47 | + - [Additional Overloads to APIs within UI Frameworks](#additional-overloads-to-apis-within-ui-frameworks) |
| 48 | + - [Distributed `ProgressReporter`](#distributed-progressreporter) |
| 49 | + - [Enhanced `FormatStyle`](#enhanced-formatstyle) |
| 50 | + - [Alternatives considered](#alternatives-considered) |
| 51 | + - [Alternative Names](#alternative-names) |
| 52 | + - [Introduce `ProgressReporter` to Swift standard library](#introduce-progressreporter-to-swift-standard-library) |
| 53 | + - [Implement `ProgressReporter` as a Generic Class](#implement-progressreporter-as-a-generic-class) |
| 54 | + - [Implement `ProgressReporter` as an actor](#implement-progressreporter-as-an-actor) |
| 55 | + - [Implement `ProgressReporter` as a protocol](#implement-progressreporter-as-a-protocol) |
| 56 | + - [Introduce an `Observable` adapter for `ProgressReporter`](#introduce-an-observable-adapter-for-progressreporter) |
| 57 | + - [Introduce Method to Generate Localized Description](#introduce-method-to-generate-localized-description) |
| 58 | + - [Introduce Explicit Support for Cancellation, Pausing, and Resuming of `ProgressReporter`](#introduce-explicit-support-for-cancellation-pausing-and-resuming-of-progressreporter) |
| 59 | + - [Check Task Cancellation within `complete(count:)` Method](#check-task-cancellation-within-completecount-method) |
| 60 | + - [Introduce `totalCount` and `completedCount` properties as `UInt64`](#introduce-totalcount-and-completedcount-properties-as-uint64) |
| 61 | + - [Store Existing `Progress` in TaskLocal Storage](#store-existing-progress-in-tasklocal-storage) |
| 62 | + - [Add Convenience Method to Existing `Progress` for Easier Instantiation of Child Progress](#add-convenience-method-to-existing-progress-for-easier-instantiation-of-child-progress) |
| 63 | + - [Allow for Assignment of `ProgressReporter` to Multiple Progress Reporter Trees](#allow-for-assignment-of-progressreporter-to-multiple-progress-reporter-trees) |
| 64 | + - [Replace Count-based Relationships between `ProgressReporter`](#replace-count-based-relationships-between-progressreporter) |
| 65 | + - [Introduce Additional Convenience for Getting `Subprogress`](#introduce-additional-convenience-for-getting-subprogress) |
| 66 | + - [Acknowledgements](#acknowledgements) |
62 | 67 |
|
63 | 68 | ## Introduction |
64 | 69 |
|
|
0 commit comments