1. Delaying Task Execution
DispatchQueue cho phép ta delay 1 task execution. Không sử dụng cái này để giải quyết các race conditions, hay những bug hacks giờ giấc như là introducing delay. Thay vào đó sử dụng khi bạn muốn run 1 task ở 1 thời điểm cụ thể.
Ý tưởng ta sẽ hiển thị 1 lời nhắc cho users nếu không có bất kì photos nào. Bạn nên tưởng tượng user sẽ nhìn ở đâu trên Home. Nếu mà display nhanh quá thì không ổn. Nên display khoảng 1,2 giây là đủ.
Update đoạn code sau trong showOrHideNavPrompt
// 1
let delayInSeconds = 2.0
// 2
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) { [weak self] in
guard let self = self else {
return
}
if PhotoManager.shared.photos.count > 0 {
self.navigationItem.prompt = nil
} else {
self.navigationItem.prompt = "Add photos with faces to Googlyify them!"
}
// 3
self.navigationController?.viewIfLoaded?.setNeedsLayout()
}
Các bước mà bạn đã làm
1. Define thời gian delay.
2. Đợi sau khoảng time đó rồi run đoạn code 1 cách không đồng bộ mà updates số lượng hình và prompt.
3. Update lên navigation bar.
showOrHideNavPrompt() executes trong viewDidLoad() và bất kì khi nào UICollectionView reloads.