Search code examples
swiftmacosfoundationnsprogress

How to display "3 of 10 files" using localizedAdditionalDescription of NSProgress


I would like to utilize NSProgress localizedAdditionalDescription but I cannot figure out the combination to get it to format file count. Either i am not getting any suffix or I get bytes.

progress.kind: File

Processing 15 files…
5 bytes of 20 bytes

progress.kind: None
25 % completed
5 of 20

let progress = Progress(totalUnitCount: 20)
progress.completedUnitCount = 5

progress.setUserInfoObject(10, forKey: ProgressUserInfoKey.fileCompletedCountKey)
progress.setUserInfoObject(15, forKey: ProgressUserInfoKey.fileTotalCountKey)

print("progress.kind: File")
progress.kind = .file
print(progress.localizedDescription)
print(progress.localizedAdditionalDescription)

print("progress.kind: None")
progress.kind = .none
print(progress.localizedDescription)
print(progress.localizedAdditionalDescription)

enter image description here


Solution

  • totalUnitCount must be zero, in addition to kind being .file, to get progress by files. You can set the fileTotalCount and fileCompletedCount directly rather than through the user info object.

    let progress = Progress()
    progress.kind = .file
    progress.fileCompletedCount = 5
    progress.fileTotalCount = 20
    print(progress.localizedAdditionalDescription)
    

    Output:

    Optional("5 of 20 files")