Hata İşleme Swift-Dil
Swift içine çok fazla okumadım ama benim dikkatimi çeken bir şey istisnalar vardır hayır. Nasıl hata swift taşıma yapıyorlar? Herkes hata işleme için bir şey bulundu mu?
CEVAP
Çalışma zamanı hataları:
Tour de leandros gibi anlaşılacağı için kullanma zamanı hataları (ağ bağlantı sorunları, ayrıştırma veri, dosya açma, vb.) kullanmanız gerekir NSError yaptığın gibi ObjC, çünkü Vakıf, AppKit, UİKit, vb rapor kendi hatalarını bu şekilde. Dil şey daha çerçeve şey.
Kullanılan bir başka sık desen AFNetworking gibi ayırıcı başarı/başarısızlık engeller
var sessionManager = AFHTTPSessionManager(baseURL: NSURL(string: "yavin4.yavin.planets"))
sessionManager.HEAD("/api/destoryDeathStar", parameters: xwingSquad,
success: { (NSURLSessionDataTask) -> Void in
println("Success")
},
failure:{ (NSURLSessionDataTask, NSError) -> Void in
println("Failure")
})
Hala hatası bloğu sık NSError örneği, hatayı açıklayan aldı.
Programcı hataları:
Programcı hataları (yasak dizi öğesi, geçersiz bağımsız bir işleve erişim arama, vb gibi) için ObjC istisnalar kullanılır. Swift dili istisnalar (*, catch, *12 vb anahtar kelime gibi) için herhangi bir dil desteği var gibi görünmüyor. Ancak belgeler ObjC olarak aynı çalışma zamanı üzerinde çalıştığı da anlaşılacağı gibi, ve bu nedenle hala bu gibi NSExceptions atmak edebiliyoruz:
NSException(name: "SomeName", reason: "SomeReason", userInfo: nil).raise()
Sen ObjC kodu istisnaları yakalamak için tercih etseler de, sadece saf olamaz Hızlı onları yakalamak.
Soruları programcı hataları için istisna atar, ya da daha doğrusu Apple dil kılavuzu da anlaşılacağı gibi iddialar kullanmanız gerekir olup olmadığıdır.
Swıft 2.0 güncelleştirin
İşler biraz daha özel durumlar için benzer bir hata işleme mekanizması, yeni bir var 2.0 ama ayrıntıda farklı Swift biraz değişti.
- Hata ihtimaline iÅŸaret etmektedir
Eğer işlev/yöntem bir hata atmak etmişlerdir istiyorsa, bu gibi throws anahtar kelime içermelidir
func rideTheDragon() throws { ... }
İşlevi aslında atmak ne belirtim yok, ya da herhangi bir hata atma ya da bir şey atma. not:
- 2=başlangıç
- Bu işlevi çağrılırken hata atabilir
Fonksiyonu çağırmak için deneyin anahtar kelime, böyle kullanmak gerekir
try rideTheDragon(dragon: Dragon)
bu çizgi normalde mevcut-catch bloğu, bu gibi olmalıdır
do {
try rideTheDragon(redDragon)
} catch DragonError.DragonIsMissing {
// Error-handling
} catch DragonError.NotEnoughMana(let manaRequired) {
// More error-handlng
} catch {
// Catch all error-handling
}
Not: fıkra çok esnek geldin o zaman Hızlı desen eşleştirme tüm güçlü özelliklerini kullanmak yakalamak.
Alternatif olarak iÅŸlevi bu gibi throws anahtar kelime ile kendini iÅŸaretlenmiÅŸtir
func fullFillQuest(quest: Quest) throws {
try rideTheDragon(quest.dragon)
}
Son ama en az değil, bu hata aslında gerçekleşmeyecek biliyorum, örneğin çoktan yaptım çünkü ön koşullar, karar ve try! anahtar kelime kullanabilirsiniz.
try! rideTheDragon(goldenDragon)
Eğer bu işlev aslında hata atar, sonra uygulamanızın çalışma zamanı hatası alırsınız.
- 3=başlangıç
- Bir hata atma
Bir hata atmak için throw bu gibi anahtar kelime kullanın
throw DragonError.DragonIsMissing
ErrorType Protokole uygun bir şey atabilir. Başlangıç olarak NSError uyan bu Protokol, ama muhtemelen gibi gitmek ile numaralama tabanlı ErrorType sağlayan grup birden çok ilgili hatalar, potansiyel olarak Ek Parçaları veriler böyle
enum DragonError: ErrorType {
case DragonIsMissing
case NotEnoughMana(manaRequired: Int)
...
}
Swıft 2.0 hata, yeni bir mekanizma ve Java/C arasındaki temel farklar#/C tipi özel durumlar şunlardır:
- Sözdizimi biraz farklıdır:
deferdo-catchtryvstry-catch-finallygeleneksel sözdizimi. - Özel durum işleme genellikle başarı yolunda daha istisna yolunda çok daha yüksek yürütme zamanı doğurur. Bu başarı yolu ve hata yolu kabaca aynı mal nerede Swıft 2.0 hataları, durum böyle değildir.
- Tüm hata atma kodu istisnalar her yerden atılmış olsa da ilan edilmelidir. Tüm hatalar "" Java isimlendirme. özel durumlar kontrol edilir Ancak, Java aksine, potansiyel olarak atılan hataları belirtmek.
- Swift istisnalar ObjC istisnalar ile uyumlu deÄŸildir.
do-catchengelleme ObjC kullanmanız için NSException, ve vice versa herhangi yakalamak olmaz. - Swift istisna ile uyumlu Kakao
NSErroryöntem sözleşmelerin dönüş yafalse(Booldöndüren fonksiyonlar) veyanil(AnyObjectdöndüren fonksiyonlar) ve geçenNSErrorPointerile hata detayları.
Syntatic-şeker gibi ekstra bir hata işleme kolaylaştırmak için, iki kavram vardır
- sonunda Java/bloklar aynı etkiyi C#/etc ulaşmak izin ertelenen eylemler (
deferanahtar kelime kullanarak) - normal hata/kod sinyal kontrol daha/başka kod varsa daha az yazalım nöbetçi deyimi (anahtar kelime
guardkullanarak).

Javascript küresel hata işleme...
Özel Hata İşleme Application_Error ASP...
Golang Hata İşleme Teknikleri...
C kodunda hata iÅŸleme...
rsync hata: "foo.kez ayarlanamadı...