Trong Swift 1.2 Tôi có điều này:Swift 2 nếu để cho với do-try-catch
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")
}
Trong Swift 2, tôi có thể không còn làm được điều này, bởi vì cả hai pathForResource
và contentsOfFile
có thể ném, cũng như trở về tùy chọn. Tôi có thể sửa chữa nó, nhưng nó bây giờ có vẻ đáng kể tiết lộ:
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")
}
Tôi mong đợi tôi đã bỏ lỡ điều gì đó - bất kỳ trợ giúp được đánh giá cao.
vừa xem bài phát biểu. tôi nghĩ bạn có thể có nhiều câu lệnh 'try' trong khối' do'. không phải là có thể? – dreamlab
Tôi chưa thấy bài phát biểu nào nhưng có vẻ như bộ tính năng của Swift đang mở rộng gần như quá nhanh. – sbooth
Bạn không cần phải có một 'catch' mỗi khi bạn sử dụng' try'. Trong thực tế, hầu hết thời gian bạn có lẽ không nên bắt ngoại lệ, và thay vào đó chỉ nên để chúng lan truyền lên trên. Xem http://exceptionsafecode.com/ (Nó nói về C++, nhưng sau khi xem xét mô hình ngoại lệ của Swift, tôi nghĩ rằng các nguyên tắc áp dụng cho Swift là tốt.) – bames53