```swift
func downloadData(key: String, identityId: String) async throws {
let options = StorageDownloadDataRequest.Options(
accessLevel: .protected,
targetIdentityId: identityId
)
let downloadTask = Amplify.Storage.downloadData(
key: key,
options: options
)
Task {
for await progress in await downloadTask.progress {
print("Progress: \(progress)")
}
}
let data = try await downloadTask.value
print("Completed: \(data)")
}
```
```swift
var progressSink: AnyCancellable?
var resultSink: AnyCancellable?
func downloadData(key: String, identityId: String) {
let options = StorageDownloadDataRequest.Options(
accessLevel: .protected,
targetIdentityId: identityId
)
let downloadTask = Amplify.Storage.downloadData(
key: key,
options: options
)
progressSink = downloadTask
.inProcessPublisher
.sink { progress in
print("Progress: \(progress)")
}
resultSink = downloadTask
.resultPublisher
.sink {
if case let .failure(storageError) = $0 {
print("Failed: \(storageError.errorDescription). \(storageError.recoverySuggestion)")
}
}
receiveValue: { data in
print("Completed: \(data)")
}
}
```