<!--
{
  "availability" : [
    "iOS: 7.0.0 -",
    "iPadOS: 7.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.9.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Foundation",
  "identifier" : "/documentation/Foundation/Progress/current()",
  "metadataVersion" : "0.1.0",
  "role" : "Type Method",
  "symbol" : {
    "kind" : "Type Method",
    "modules" : [
      "Foundation"
    ],
    "preciseIdentifier" : "c:objc(cs)NSProgress(cm)currentProgress"
  },
  "title" : "current()"
}
-->

# current()

Returns the progress instance, if any.

```
class func current() -> Progress?
```

## Return Value

The progress instance for the current thread, if any.

## Discussion

If you invoke [`becomeCurrent(withPendingUnitCount:)`](/documentation/Foundation/Progress/becomeCurrent(withPendingUnitCount:)) on the current thread, this method returns the progress instance.

Use this per-thread [`current()`](/documentation/Foundation/Progress/current()) value to allow code that performs work to report useful progress even when it’s widely separated from the code that actually presents progress information to the user, and without requiring layers of intervening code to pass around an [`Progress`](/documentation/Foundation/Progress) instance.

To ensure that you report progress in known units of work, you typically work with a suboperation progress object that you create by calling [`discreteProgress(totalUnitCount:)`](/documentation/Foundation/Progress/discreteProgress(totalUnitCount:)).

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)