2016-04-07 23 views
1

Verilen argümanın Swift'de geçersiz olduğu işlevinden hatayı yaymanın standart bir yolu var mı?Swift'de Argüman Doğrulama Hatası yaymanın en iyi yolu nedir?

Hata türünü kendim tanımlayabilirim. Ama standart bir yol varsa yinelenen çabalardan kaçınmak istiyorum.

Başka bir seçenek dönüş türünü null yapılabilmektedir. (Şahsen ben denedikten sonra hata atmayı tercih edelim? Aynı etkiyi yapabiliriz.)

Swift'de 'Standart' veya 'İyi' olarak hangi yol görülüyor?

+1

Bir şey için, kendi ErrorType'ınızı tanımlamaktan biraz daha "standart" olan herhangi bir NSError'ı "atabilirsiniz". – jtbandes

+0

Anladım. NSError'da standart kodlar olmadığını sanıyordum ama şimdi bazı [kodlar] olduğunu gördüm (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/index.html#//apple_ref/doc/constant_group/NSError_Codes) kakao alanında tanımlanmıştır. NSError, kakao alanı ve NSValidationErrorMinimum kodu ile iyi bir aday olabilir. – Satoshi

cevap

0

Kodumu kullanan geliştiricilere bir şeyler ters gittiğini anlatmak için de aynısını kullandım. Uygulamayı durduracağından kesin olun.

class AbstractMethodException: NSException { 
    init() { 
     super.init(
      name: "Called an abstract method", 
      reason: "All abstract methods must be overriden by subclasses", 
      userInfo: nil) 
    } 
    //required by Xcode compiler. strange thing 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 
} 

Ve soyut işlev için bir exaption nasıl yükseltileceği bir kullanım örneği var.

func update(withData data: PVModel) { 
     AbstractMethodException().raise() 
} 

Sadece bir hata atılması gerekiyorsa ErrorType protokolünü kullanmanız önerilir.

+0

Teşekkürler. Kafa karıştırıcı olduğu için başlığı değiştirdim. Gönderdiğiniz sırada Swift'de NSException.raise ve NSInvalidArgumentException öğelerini kullanabileceğimi öğrendim. Bunlar ErrorType'a dönüştürülmez ve bahsettiğiniz gibi SIGABRT'ye neden olur. Benim durumumda ErrorType daha iyi görünüyor çünkü uygulamanın çökmesine veya yakalama/isteğe bağlı ikame ile ele alınmasına izin verme seçeneği var. – Satoshi

+0

@ Saptoshi evet. Bu, soyut fonksiyonun nasıl çalışması gerektiği. sadece SIGABRT neden olur. –