do-catch deneyin: Her iki pathForResource
ve contentsOfFile
atabilir, çünküSwift 2 ile izin verirsen ben bu var Swift 1.2 olarak
if let filePath = NSBundle.mainBundle().pathForResource("some", ofType: "txt"),
data = String(contentsOfFile: filePath, encoding: NSUTF8StringEncoding) {
for line in data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) {
// Do something
}
} else {
println("some.txt is missing")
}
Swift 2'de, artık bunu yapabilirsiniz, hem de geri dönen opsiyoneller. Bunu düzeltmek, ancak şimdi oldukça ayrıntılı görünüyor:
do {
if let filePath = try NSBundle.... {
do {
if let data = try String.... {
for line in data..... {
// Do something
}
} else {
print("Nil data")
}
} catch {
print("contentsOfFile threw")
}
} else {
print("Nil pathForResource")
}
} catch {
print("pathForResource threw")
}
Ben bir şey kaçırmış bekliyoruz - takdir herhangi bir yardım.
sadece anahtar notu gördü. "Yap" bloğunda birden çok "try" ifadesine sahip olabileceğinizi düşündüm. Bu mümkün değil mi? – dreamlab
Henüz bir not görmedim ama Swift'in özellik seti neredeyse çok hızlı bir şekilde genişliyor gibi görünüyor. – sbooth
"try" işlevini her kullanışınızda kullanmanız gerekmez. Aslında, çoğu zaman muhtemelen istisnaları yakalamamanız gerekir, bunun yerine sadece yukarı doğru yayılmasına izin vermelisiniz. Bkz. Http://exceptionsafecode.com/ (C++ hakkında konuşur, ancak Swift'in istisna modeline baktıktan sonra prensiplerin Swift için de geçerli olduğunu düşünüyorum.) – bames53