So sánh giữa các cách tiếp cận khác nhau trong swift 3.0
1. Ngủ
Phương pháp này không có cuộc gọi lại. Đặt mã trực tiếp sau khi dòng này được thực hiện trong 4 giây. Nó sẽ ngăn người dùng lặp lại với các thành phần UI như nút kiểm tra cho đến khi hết thời gian. Mặc dù nút này bị đóng băng khi ngủ, nhưng các yếu tố khác như chỉ báo hoạt động vẫn quay mà không bị đóng băng. Bạn không thể kích hoạt hành động này một lần nữa trong khi ngủ.
sleep(4)
print("done")//Do stuff here
2. Công văn, thực hiện và hẹn giờ
Ba phương thức này hoạt động tương tự nhau, tất cả chúng đều chạy trên luồng nền với các cuộc gọi lại, chỉ với cú pháp khác nhau và các tính năng hơi khác nhau.
Công văn thường được sử dụng để chạy một cái gì đó trên luồng nền. Nó có hàm gọi lại như là một phần của chức năng gọi
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(4), execute: {
print("done")
})
Thực hiện là một bộ đếm thời gian đơn giản hóa. Nó thiết lập một bộ đếm thời gian với độ trễ, và sau đó kích hoạt chức năng bằng bộ chọn.
perform(#selector(callback), with: nil, afterDelay: 4.0)
func callback() {
print("done")
}}
Và cuối cùng, bộ đếm thời gian cũng cung cấp khả năng lặp lại cuộc gọi lại, điều này không hữu ích trong trường hợp này
Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(callback), userInfo: nil, repeats: false)
func callback() {
print("done")
}}
Đối với cả ba phương pháp này, khi bạn nhấp vào nút để kích hoạt chúng, UI sẽ không bị đóng băng và bạn được phép nhấp lại vào nó. Nếu bạn bấm vào nút một lần nữa, một bộ đếm thời gian khác được thiết lập và cuộc gọi lại sẽ được kích hoạt hai lần.
Tóm lại là
Không ai trong số bốn phương pháp hoạt động đủ tốt chỉ bằng chính họ. sleep
sẽ vô hiệu hóa tương tác người dùng, do đó màn hình " đóng băng " (không thực sự) và dẫn đến trải nghiệm người dùng xấu. Ba phương pháp khác sẽ không đóng băng màn hình, nhưng bạn có thể kích hoạt chúng nhiều lần và hầu hết các lần, bạn muốn đợi cho đến khi bạn nhận lại cuộc gọi trước khi cho phép người dùng thực hiện lại cuộc gọi.
Vì vậy, một thiết kế tốt hơn sẽ được sử dụng một trong ba phương pháp không đồng bộ với chặn màn hình. Khi người dùng nhấp vào nút, che toàn bộ màn hình bằng một số chế độ xem mờ với chỉ báo hoạt động xoay tròn ở trên, cho người dùng biết rằng việc nhấp vào nút đang được xử lý. Sau đó xóa chế độ xem và chỉ báo trong chức năng gọi lại, thông báo cho người dùng rằng hành động được xử lý đúng cách, v.v.