错误处理简介

1年前 阅读 209 评论 0 赞 0

错误处理简介

问题

1.你如何警告你的同事这个功能可能会导致意想不到的结果?
2.什么是do-try块?
3.你如何区分try?,try!和try?

设计安全功能

根据高度为骑手设计安全检查。如果乘客高于2米或以下,则程序将发送错误信息以及其他说明。

  1. func checkHeight(height: Int) {
  2. if height > 200 {
  3. print("You are going to hit your head and fall off")
  4. // Take him/her off from the ride
  5. // Code ...
  6. // Seatbelt tighten
  7. } else if height < 140 {
  8. print("You might fly in the air")
  9. // Take him/her off from the ride
  10. // Code ...
  11. } else {
  12. print("Enjoy")
  13. // Take him/her to the ride
  14. // Code ...
  15. }
  16. }

问题如果单独

1.膨胀的功能
2.缺乏模块化
3.不确定

错误处理

Error Handling只是写一个else-if语句的另外一种方式,不仅处理错误消息,而且在单独的块中对它们进行响应。

设计错误

创建符合Error协议的枚举。确定几例。

  1. enum HeightError: Error {
  2. case maxHeight
  3. case minHeight
  4. }

声明符合错误协议的任何类型都可用于表示Swift错误处理系统中的错误。因为错误协议没有自己的要求,您可以在创建的任何自定义类型上声明一致性。

设计投掷功能

创建一个函数,通过插入throws函数参数的末尾来抛出/返回错误。该函数不包含错误消息。相反,它会“抛出”一个错误,将被“捕获”并在一个单独的块中处理do-try。

  1. func checkHeightError(height: Int) throws {
  2. if height > 200 {
  3. throw HeightError.maxHeight
  4. } else if height < 140 {
  5. throw HeightError.minHeight
  6. } else {
  7. print("Enjoy your ride")
  8. }
  9. }

呼叫和处理错误

要调用包含throws的函数,该函数需要try一个do块内。一个catch块用于识别和该函数抛出的错误。如果没有抛出错误,该catch块将被忽略。

  1. do {
  2. try checkHeightError(height: 240)
  3. } catch HeightError.maxHeight {
  4. print("Get out of here")
  5. // Logic
  6. } catch HeightError.minHeight {
  7. print("Too short to ride")
  8. }

错误处理对象初始化

设计错误

  1. enum NameError: Error {
  2. case noName
  3. }

设计投掷类

当用户在初始化时输入一个空字符串,init方法抛出NameError.noName。

  1. class Course {
  2. var name: String
  3. init(name: String) throws {
  4. if name == "" {
  5. throw NameError.noName
  6. } else {
  7. self.name = name
  8. print("You've created an object!")
  9. }
  10. }
  11. }

初始化和处理错误

try在do-catch块内创建一个对象。

  1. do {
  2. let myCourse = try Course(name: "")
  3. } catch NameError.noName {
  4. print("Please make sure put something")
  5. // Logic
  6. }

区分以下try?,try!和try

try仅在do-catch块内使用。然而,try?并且try!没有它也可以使用。

你可以摆脱使用try无do-try内游乐场块,但它不是在其他地方不允许的。

try?

它返回一个可选的类型。如果它抛出一个错误,结果将是nil。

  1. let newCourse = try? Course(name: "Bob the Dev") // returns Course?
  2. let newDopeCourse = try? Course(name: "") // nil

try!

它返回正常类型。如果方法/ init抛出错误,它将崩溃。

  1. let myNewCourse = try! Course(name: "Bobby Lee") // 👍
  2. let myDopeNewCourse = try! Course(name: "") // ☠️

源代码

1004_intro_error_handling.playground

你的支持将鼓励作者继续创作

评论(0)

(无)