<!--
{
  "availability" : [

  ],
  "documentType" : "symbol",
  "framework" : "BitcoinKernel",
  "identifier" : "/documentation/BitcoinKernel/BlockchainSync/progress",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Property",
  "symbol" : {
    "kind" : "Instance Property",
    "modules" : [
      "BitcoinKernel"
    ],
    "preciseIdentifier" : "s:13BitcoinKernel14BlockchainSyncV8progressSo10NSProgressCvp"
  },
  "title" : "progress"
}
-->

# progress

[`Foundation.Progress`](https://developer.apple.com/documentation/foundation/progress)
tracking `completedUnitCount` = local tip height and `totalUnitCount`
= remote tip height.

```
var progress: Progress { get }
```

## Discussion

The same `Progress` instance persists across [`updates()`](/documentation/BitcoinKernel/BlockchainSync/updates()) calls and
survives the entire lifetime of this `BlockchainSync`. That
persistence is the point: bind it once to
`SwiftUI.ProgressView(_:)` or
[`BGContinuedProcessingTask.progress`](https://developer.apple.com/documentation/backgroundtasks/bgcontinuedprocessingtask/progress)
and it tracks automatically, including across sync restarts.

> Note: `Progress` updates use KVO; SwiftUI observes them without any
> extra wiring. Raw KVO observers should key-path-observe
> `fractionCompleted`.