2016-09-28 20 views
23

Trước Swift 3 Tôi đã sử dụng:Xử lý thử và ném trong Swift 3

guard let data = Data(contentsOf: url) else { 
       print("There was an error!) 
       return 
      } 

Tuy nhiên bây giờ tôi phải sử dụng do, trycatch. Tôi không quen thuộc với cú pháp này. Làm thế nào tôi sẽ tái tạo hành vi này?

Trả lời

70

Sự khác biệt ở đây là Data(contentsOf: url) không trả lại tùy chọn nữa, nó sẽ ném.

Vì vậy, bạn có thể sử dụng nó trong Do-Catch nhưng không guard:

do { 
    let data = try Data(contentsOf: url) 
    // do something with data 
    // if the call fails, the catch block is executed 
} catch { 
    print(error.localizedDescription) 
} 

Lưu ý rằng bạn vẫn có thể sử dụng guard với try? thay vì try nhưng sau đó được thông báo lỗi có thể được bỏ qua. Trong trường hợp này, bạn không cần khối Do-Catch:

guard let data = try? Data(contentsOf: url) else { 
    print("There was an error!") 
    // return or break 
} 
// do something with data 
+2

Cảm ơn bạn! Ví dụ thứ hai là chính xác những gì tôi đang tìm kiếm! – KexAri

+0

@Moritz Có cách nào để thêm thông báo lỗi vào mệnh đề khác không? – eonist

+0

@GitSync Không có 'try? ', Không. Bạn cần Do-Try-Catch để nhận được thông báo lỗi. – Moritz

Các vấn đề liên quan