📜  Swift-取消初始化(1)

📅  最后修改于: 2023-12-03 15:05:26.282000             🧑  作者: Mango

Swift-取消初始化

在Swift中,取消初始化是指未能成功初始化一个对象或实例。本文将向程序员介绍Swift中的取消初始化及其注意事项。

初始化方法

在Swift中,初始化方法通常是用init()声明的。它们负责为特定的类或结构体实例分配并初始化内存空间。如果初始化成功,则返回一种类型的实例。如果失败,则返回nil值。

class Person {
  var name: String
  
  init?(name: String) {
    if name.isEmpty { return nil }
    self.name = name
  }
}

let john = Person(name: "John")       // 初始化成功
let anonymous = Person(name: "")     // 初始化失败,返回nil
取消初始化

取消初始化在Swift中有两种方法:抛出错误和返回nil。

抛出错误

抛出错误是指初始化方法可能会抛出异常。这可以通过将初始化方法的返回类型更改为Throwing方法来实现。

enum InitializationError: Error {
  case invalidName
}

class Person {
  var name: String
  
  init(name: String) throws {
    if name.isEmpty { throw InitializationError.invalidName }
    self.name = name
  }
}

do {
  let john = try Person(name: "John")       // 初始化成功
  let anonymous = try Person(name: "")     // 初始化失败,抛出异常
} catch {
  print(error)    // InitializationError.invalidName
}
返回nil

返回nil意味着初始化方法可能返回nil值。这可以通过将初始化方法的返回类型更改为Optional类型来实现。

class Person {
  var name: String
  
  init?(name: String) {
    if name.isEmpty { return nil }
    self.name = name
  }
}

let john = Person(name: "John")       // 初始化成功
let anonymous = Person(name: "")     // 初始化失败,返回nil
注意事项
  • 取消初始化方法必须用关键字init?或init来声明。
  • 取消初始化方法的返回类型必须是Optional或Throwing类型之一。
  • 如果取消初始化方法的返回类型为Optional,则初始化失败将返回nil值。
  • 如果取消初始化方法的返回类型为Throwing,则初始化失败将抛出异常。
  • 取消初始化方法不能在定义中使用常量或变量。
  • 取消初始化方法中不能调用另一个初始化方法,而必须调用该类的其他方法。
结论

Swift中的取消初始化方法允许程序员在初始化对象时处理异常情况。它们的应用可以使代码更加健壮并且不容易出错。