try? ve try!
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 46 / 56.
Bazen bir işlevin hangi hatayı fırlattığını önemsemezsin; yalnızca bir sonuç veya bir yedek değer istersin. Swift sana iki kısa biçim sunar.
try? fırlatılan herhangi bir hatayı nil değerine dönüştürür. Sonuç, işlevin dönüş türünün bir Optional değeridir:
enum E: Error { case nope }
func risky() throws -> Int { throw E.nope }
let result = try? risky() // nil
let safe = (try? risky()) ?? 0 // 0Satır içi bir varsayılan değer için bunu ?? ile birlikte kullanın. Bu, "bu şeyi çağır, her iki durumda da bana bir değer ver" ifadesinin en kısa hâlidir.
try! “Bunun hata fırlatmayacağını biliyorum” der. Fırlatırsa programınız çöker. Bunu yalnızca çağrının güvenli olduğunu kanıtlayabildiğinizde kullanın; günlük kodlarda, bir geri dönüş değeriyle birlikte try? kullanımını veya tam do/catch yapısını tercih edin.
Görev
KolayTek bir bad durumu içeren NumError: Error tanımlayın. Şunları yapan, hata fırlatan bir parseEven(_ s: String) throws -> Int tanımlayın:
sdeğeriIntolarak ayrıştırılamadığında veya ayrıştırılan değer tek olduğunda.badfırlatır- Aksi takdirde ayrıştırılan tamsayıyı döndürür
Tek bir girdi satırı okuyun: virgülle ayrılmış bir dizeler listesi. Her biri için, ayrıştırılmış çift tamsayıyı veya -1 değerini elde etmek üzere try? ve ardından ?? -1 kullanın.
Ortaya çıkan tamsayıları sırayla , ile birleştirerek yazdırın. Ardından ikinci satırda -1 olarak dönen değerlerin sayısını yazdırın.
4,7,abc,8,11,2 girdisi için çıktı şöyledir:
4,-1,-1,8,-1,2
3Kendin dene
let parts = readLine()!.components(separatedBy: ",")
// TODO: enum NumError; func parseEven(_:) throws -> Int;
// her bir parça için, (try? parseEven(part)) ?? -1
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Stringler Derinlemesine
Sayma ve İndekslerBüyük-Küçük Harf ve KırpmaStringlerde AramaBölme ve BirleştirmeAlt Stringleri DeğiştirmeÖzet - Kullanıcı Adı Kontrolü4Kümeler
Küme OluşturmaBirleşim ve KesişimFark ve Simetrik FarkAlt Küme ve Üst KümeÖzet - Etiket Filtresi7Proje - Alışkanlık Takibi
Projeye Genel BakışTamamlandı Olarak İşaretle10Proje - Quiz Motoru
Projeye Genel BakışSoruları Sorma2Aralıklar ve Adımlar
Kapalı ve Yarı AçıkStride (Adım)Aralık MetotlarıSwitch İçinde AralıklarÖzet - Takvim Izgarası5Yüksek Mertebeden Fonksiyonlar Bölüm 1
MapFilterReduceMap, filter, reduce zincirlemeÖzet - Kelime İstatistikleriKendi başına pratik yap: Swift playground