Вы можете переместить функцию отправки уведомлений прямо в op.completionBlock (без отправки ее в основной поток).
Edit (комментарии):
let queue = OperationQueue()
queue.name = "com.company.myQueue"
queue.qualityOfService = .userInitiated
queue.maxConcurrentOperationCount = 64
let array = ["", "", "", "", "", ]
var current = 0
var totalCount = array.count
for _ in array {
let op = BlockOperation { current += 1 ; print(current) }
op.completionBlock = {
DispatchQueue.main.async {
NotificationCenter.default.post(name: Notification.Name(rawValue: "update"), object: nil, userInfo: ["value": CGFloat(current / totalCount)])
}
}
queue.addOperation(op)
}
NotificationCenter.default.addObserver(forName: Notification.Name(rawValue: "update"), object: nil, queue: nil) { (notification) in
print(notification.userInfo)
}
Edit 2 (комментарии): Перед их делением вы должны получить свой процент, используя значение float casting current и totalCount.
CGFloat(current) / CGFloat(totalCount)
'''