2015-09-25 12 views
25

bir yöntem tarafından atılan hataları görmezden şık bir yol: çağrı yapıldığında dosya varsaBöyle <code>NSFileManager</code> ile geçici bir dosya çıkarmadan ediyorum

let fm = NSFileManager() 
fm.removeItemAtURL(fileURL) 
// error: "Call can throw but it is not marked with 'try'" 

Gerçekten umurumda değil ve Eğer zaten kaldırılmışsa, öyle olsun.

Swift'e do/catch kullanmadan atılan hataları göz ardı etmesini söylemenin zarif bir yolu ne olurdu?

cevap

40

başarı umurumda değil ya da değil o zaman Swift belgelerinde "Error Handling" itibaren

let fm = NSFileManager.defaultManager() 
_ = try? fm.removeItemAtURL(fileURL) 

diyebilirsen: Bir dönüştürerek

bir hatayla işlemek için try? kullanmak isteğe bağlı değer. try? ifadesini değerlendirirken bir hata atılırsa, ifadenin değeri nil'dur.

removeItemAtURL() döner "hiçbir şey" (aka Void), try? ifadesinin nedenle dönüş değeri Optional<Void> olduğunu. Bu dönüş değeri _'a atanması, "denemenin sonucunu" önler. kullanılmaz " uyarı.

sonra atıldı belirli hata nil karşı try? ait dönüş değeri test edebilirsiniz sadece çağrısının sonuçlarına ilgilenen ancak iseniz:

if (try? fm.removeItemAtURL(fileURL)) == nil { 
    print("failed") 
} 

Güncelleme :Swift 3 (Xcode 8),'dan itibaren kukla atamaya ihtiyacınız yoktur, en azından bu özel durumda değil:

, uyarılar olmadan derler.

+1

Teşekkürler. Bu kesinlikle en zarif yoldur. Ama yine de garip ve tutarsız görünüyor çünkü ifadeler "foo? .bar()" gibi isteğe bağlı zincirlemeyi içeriyor çünkü döndürülen ve kullanılmayan isteğe bağlı Void değerleri hakkında uyarı getirmiyor. Neden "dene?" yap? Umarım Apple bunu bir başka Swift versiyonuyla düzeltir. – Lensflare

+0

Harika bir açıklama için teşekkür ederiz. !! –

İlgili konular