Swift programlama dili el kitabını okuyorum ve kaçan bir kapatmadan bahsediyor. Kaçan kapamalarla ilgili olarak, "kapama, işlevin bir argümanı olarak geçilir, ancak işlev geri döndükten sonra çağrılır" ile ne demek istediklerini bilmiyorum. Birisi kaçan kapanmalara örnek verebilir mi?Swift'de kaçış kapanmasının güzel bir örneği nedir?
6
A
cevap
2
bir kaçış kapağın bir örneği bazı asenkron görevi, bu tür bir ağ istedikten olarak tamamlama işleyici olacaktır:
func performRequest(parameters: [String: String], completionHandler: (NSData?, NSError?) ->()) {
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters, options: [])
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
completionHandler(data, error)
}
task.resume()
}
Ve bu yüzden böyle denir: Bu completionHandler
performRequest(["foo" : "bar"]) { data, error in
guard error == nil else {
print(error)
return
}
// now use data here
}
// Note: The `completionHandler` above runs asynchronously, so we
// get here before the closure is called, so don't try to do anything
// here with `data` or `error`. Any processing of those two variables
// must be put _inside_ the closure above.
Kapanış, NSURLSession
yöntem dataTaskWithRequest
zaman uyumsuz olarak çalıştığı için kaçma olarak kabul edilir (yani hemen döner ve istek bittiğinde daha sonra kendi kapanması çağrılır).
2
Swift 3'te kapatma parametreleri varsayılan olarak kaçmıyor.
İşlev döndükten sonra kapanışın çağrıldığını göstermek için parametre türünden önce kapanış özniteliğini yazmamız gerekiyor. Biz @escaping
özelliğini kaldırırsanız
typealias Operation = (Data?) ->()
func addToQueue(data: Data?, operation: @escaping Operation) {
OperationQueue.main.addOperation {
operation(data)
}
}
, Xcode
İlgili konular
- 1. Python Gstreamer kamerası görüntüleyici bu güzel örneği
- 2. kaçış
- 3. SSIS İfade Oluşturucu için kaçış karakteri nedir?
- 4. Pratik bir havuz oluşturma örneği nedir?
- 5. Java Swing uygulamasının iyi bir örneği nedir?
- 6. Bir Kotlin Dizgisinde $ {something} Kaçış
- 7. Kaçış Alıntı
- 8. güzel çorba bir Tag
- 9. Bir yazım örneği örneği ve
- 10. Destek için güzel bir örnek :: algorithm :: join
- 11. Hızda bir # kaçış nasıl olur
- 12. Mustache.js + jQuery: En az çalışma örneği nedir?
- 13. Basit C++ Kalıtım Örneği, Sorun nedir?
- 14. Mutlak en kısa d3 alanı örneği nedir?
- 15. Web.config dosyasındaki dizgi değişmezleri için kaçış dizisi nedir?
- 16. Dizeler java'daki kaçış dizilerini yoksay?
- 17. Eclipse/Android'te Köşeli Ayraçlardan Kaçış
- 18. Haskell - güzel baskı ile sorun bir liste
- 19. D3.js'de basit bir dağılım örneği örneği?
- 20. delegasyon örneği
- 21. Rails değerlerini kaçış (mysql_real_escape_string() ile benzer
- 22. perl \ kaçış dizisi
- 23. Kaçış html'ye nasıl söylenir?
- 24. IntelliJ otomatik tamamlama kaçış
- 25. Kaçış Karakterleri İçeren Doctest
- 26. İfade Dili'ndeki JavaScript'ten Kaçış
- 27. kaçış sırası? Qstring
- 28. Java'da Kaçış mı?
- 29. EditText'ten dize kaçış
- 30. elasticsearch'te eğik çizgiden kaçış
Oldukça net cevap aşağıda hata mesajı gösterecektir, benim konuydu nerede anlamaya yardımcı oldu. 3-4 seviyeli kapanışlarım vardı, bu yüzden '@ escaping'in tam olarak nereye yerleştirileceğini anlamak zordu. – Jonauz