2015-09-18 17 views

cevap

56

Hata, kapatma mandalının kapsamlı olmadığını anlatıyor. Bunun nedeni, otomatik oluşturulan catch bloğunun yalnızca NSError nesnelerini yakalaması ve derleyicinin başka bir ErrorType atılıp eklenmeyeceğini söyleyememesidir.

Eğer fonksiyon atabilir biliyoruz hata türlerini işleme ek olarak
do { 
    objects = try managedObjectContext?.executeFetchRequest(request) 
} catch let error1 as NSError { 
    error = error1 
    objects = nil 
} catch { 
    // Catch any other errors 
} 
5

, sen işlemek gerekir: Eğer başka bir hata atılmasına eminseniz

, başka varsayılan catch bloğu ekleyebilirsiniz Evrensel yakalama bloklarıyla bilmediğiniz hata tipi. Sadece ekstra catch bloğu kullanın ve kullanıcıya genelleştirilmiş bir hata mesajı yazdırın.

Özel hata işleme koduma bakın. Burada, tek ve 100'den küçük bir sayı yazdıracak bir işlev oluşturdum. İki tür Hata ile işledim: Hatta ve çokBüyük, bunun için bir tür ErrorType türü oluşturduk.

enum InvalidNumberError : ErrorType{ 
     case even 
     case tooBig 
    } 

    //MARK: this function will print a number if it is less than 100 and odd 

    func printSmallNumber(x :Int) throws{ 

     if x % 2 == 0 { 
      throw InvalidNumberError.even 
     } 
     else if x > 100 { 
      throw InvalidNumberError.tooBig 
     } 

     print("number is \(x)") 
    } 

Hata işleme kodu:

do{ 
     try printSmallNumber(67) 
    }catch InvalidNumberError.even{ 
     print("Number is Even") 
    }catch InvalidNumberError.tooBig{ 
     print("Number is greater tha 100") 
    }catch{ 
     print("some error") 
    } 

Son catch bloğu bilinmeyen bir hata işlemek etmektir.

Şerefe!

+4

Func tarafından atılan olası hataları sınırlamanın bir yolu yok mu? func printSmallNumber (x: Int) InvalidNumberError'ı atar? Bu mümkün olsaydı tatlı olurdu. –