Uygulamada HTTP isteklerinin yapılmasından sorumlu bir işleve sahibim. Temel olarak, gerekli tüm üstbilgileri, zaman aşımlarını, vb ... ayarlar ... Sonra, istek tamamlandığında, 2 işlevi (geliştirici tarafından sağlanan) çalıştırıyorum: whenSuccess
/whenError
(sonucun sonucuna bağlı olarak) arama) ve whenComplete
(aramanın sonucuna bakılmaksızın). Sonuncusunun whenSuccess
işlevinin sonucunu alabilmesini istiyorum. Swift - Genel olmayan bir tanımlama konusunda uzmanlık açılamıyor
private func doRequest<S>(whenSuccess: (_ json: JSON?)->(S?),
whenError: (_ description: String)->(),
whenComplete: Optional<(S?)->()>) {
// yada yada yada
}
Yani, geliştirici bir JSON
alır ve genel döndüren bir işlev sağladığından doRequest
fonksiyon ilan var. whenError
çağrılırsa, whenComplete
parametresi olarak nil
ile çağrılır.
Ben
doRequest<Int>(whenSuccess: { (json) -> (Int?) in //Cannot specialize a non-generic definition
return 5
}, whenError: { (error) in
}) { (success) in
}
ile hatırlatıyorum hata yorumladı olsun:
herhangi bir fikir bu yapılabilir eğer
olmayan bir jenerik çözünürlüklü uzmanlaşmak olamaz ve Nasıl?
"(json) -> (? Int) 'de" derleyici bunu anlamaya gidiyor çünkü kendi başına. – gnasher729
Hiç de değil. Çağrındaki işlev adından sonra '' bırakın. –
werediver
Teşekkürler @werediver, bu hile yaptı! Dilleri anlatabilmek için çabucak gelir ve çabuk gelmek hıçkırıklarına sahiptir. Cevabınızı sadece bir bütünlük için kod parçasıyla düzenlemeye davet ediyorum :) –