firstName
ve lastName
gibi değişkenlerle Person
adında bir sınıfımız olduğunu varsayalım. Bu değişkenlerdeki değişiklikleri bir reaktifCocoa-framework kullanarak dinliyorum, fakat diyelim ki sadece didSet{}
gibi KVO dinlemede yerleşik yapıyorum.Belirli bir süre bekleyip yalnızca son işlev çağrısı gerçekleştiriliyor
let firstName:String { didSet{ self.nameDidChange() }}
let lastName: String { didSet{ self.nameDidChange() }}
func nameDidChange(){ print("New name:", firstName, lastName}
Ben ilk adını veya soyadını ya değiştirecek her zaman, otomatik olarak işlevini nameDidChange
çağırır: Ben bu kod var varsayalım. Ne merak ediyorum,işlevinin firstName
ve lastName
her ikisini de değiştirdiğimde üst üste iki kez çağrılmasını önlemek için herhangi bir akıllı hareket var mıdır.
firstName
değeri
"Anders"
ve
lastName
"Andersson"
olduğunu varsayalım: Burada iki kez
firstName = "Borat"
lastName = "Boratsson"
nameDidChange
çağrılır. Önce "New name: Borat Andersson"
, sonra "New name: Borat Boratsson"
yazdıracaktır. Benim basit zihninde
, ben didSet
herhangi çağrıldığında diyoruz ve benzeri 0,1 saniye bir zamanlayıcı başlatmak, nameIsChanging()
gibi bir şey adlı bir işlev oluşturabilir düşünme ve sonra çağrı nameDidChange()
ama değilim Bu didSet
s her ikisi de nameIsChanging
arayacak, böylece zamanlayıcı iki kez gidecek ve iki kere ateş. Bunu çözmek için, bir "global" Timer
'u saklayabilir ve onu geçersiz kılabilir ve sayımı veya benzeri bir şeyi yeniden başlatabilirim, ancak çözümlerin ne kadar çok olduğunu düşünürler. Burada "en iyi uygulamalar" var mı?
Varsayılan olarak "false" olan bir "Boole" isChangingName "ve" nameDidChange "içinde bu şekilde ayarlayın, daha sonra" nameIsChanging "," false "olduğundan emin olmak için bir" guard "kullanabilir. 've sonra bir zamanlayıcı ile gecikmeli çalışmayı başlatın ya da '' (:, afterDelay: ile) gerçekleştirin. – theMikeSwan
Bence yapay bir gecikme ekleyerek, kullanıcı bunu" yavaş "veya bağlantısız hissettirebilir. İşlevi çağırmayı geciktirmeye gerçekten ihtiyaç var mı? Gecikme rotasına giderseniz, uygulamanın bir şeyler yaptığını * görsel * belirtmeniz gerekir. – Zig
@Zig Aynı anda ayarlanacağından, bunu önlemek için yalnızca 0,01 saniye gecikmeye ihtiyacım var. Bu sadece programatik olarak aynı zamanda ayarlandığında geçerlidir. Bunun yanı sıra, ayrı ayrı da değiştirildiyse, fonksiyonu çağırmaları için onlara ihtiyacım var. İhtiyaç duyulmadığında her birinin bir url isteğini tetiklemesi önlenir. – Sti