Swift 属性17 Mar 2025 | 5 分钟阅读 我们可以定义属性,将值与类、结构体和枚举相关联。 在 Swift 中,我们可以将属性定义为两种类型:存储属性和计算属性。 但是,存储属性将变量和常量值存储为类属性。 另一方面,计算属性根据特定值计算值。 我们可以在类、结构体和枚举中定义计算属性; 但是,存储属性只能在类和结构体中定义。 特定类型的实例,包括结构体、类和枚举,与类型中定义的所有属性相关联。 但是,属性不仅可以与实例关联,还可以仅与类型关联。 这种属性称为类型属性。 在本教程的这一部分中,我们将讨论各种类型的 Swift 属性,如存储属性和计算属性。 存储属性简单来说,存储属性是定义为特定类或结构体实例一部分的常量或变量。 存储属性可以是常量(使用 let 关键字定义)或变量(使用 var 关键字定义)。 我们可以在声明时为存储属性赋予默认值。 但是,我们可以在初始化类或结构体时稍后修改存储属性的默认值。 让我们考虑以下示例,它将类定义为 Person。 它包含变量存储属性,如 name 和 age。 每个人都有一个默认的 name 和 age,可以在稍后初始化时更改。 现在,如果我们创建 Person 类的实例并将其标记为常量,它不会影响我们的变量存储属性,因为我们仍然可以更改它们的值,如下所示。 这会在控制台上打印以下输出。 "John 23" 但是,对于结构体类型来说,情况并非如此,因为结构体是值类型。 如果我们将结构体标记为常量,则无论该属性是否为变量,我们都无法更改其所有存储的属性。 考虑以下示例。 延迟存储属性延迟存储属性直到第一次使用时才占用系统中的内存。 换句话说,延迟存储属性的值直到第一次访问时才计算。 我们可以使用 Swift 中的“lazy”关键字将属性定义为延迟属性。 但是,我们不能将延迟存储属性定义为常量,因为它的值可能无法在声明时检索。 在我们的属性值取决于外部因素并且需要在已知这些值后计算的情况下,延迟属性很有用。 如果该属性需要在初始化期间进行复杂的设置,并且直到第一次访问该值时才需要,我们也可以使用延迟属性。 考虑以下示例,它定义了类 Employee 和 Department 之间的关系。 在这里,类 Department 包含类型为 Employee 的延迟存储属性,表明只要 Department 与 Employee 相关联,就会创建 Employee 属性。 计算属性我们可以将计算属性定义为类、结构体和枚举类型实例的一部分。 与存储属性不同,计算属性不存储值。 相反,它们提供 getter 和可选的 setter 来间接检索和设置其他属性和值。 示例 1 考虑以下示例,它定义了一个类 Person。 Person 具有 name、age 和给世界的一条特殊消息。 虽然 name 和 age 是存储属性,但 message 是一个计算属性,其值是根据 Person 的 name 和 age 确定的。 Person 类包括存储属性,如 name、age 和该人希望参加的节日。 但是,message 正在被计算。 因此,它是一个计算属性,其值基于一个人的姓名、年龄以及将要传递的消息的节日。 如果我们打印出该人的消息,则以下消息将打印在控制台上。 "Hi I am John, and I am 23 years old. I wish you all a very Happy Diwali" 示例 2 考虑以下示例,其中类 Circle 包含两个属性。 radius 是存储属性,而 area 是根据圆的 radius 计算得出的。 它在控制台上打印以下内容。 "Area of circle is 31400.0" 示例 3 让我们扩展示例 2 中定义的 Circle 类,并在给定圆面积的情况下计算半径。 如果我们为圆的面积分配一些值,它将根据面积计算半径并将其分配给存储的属性半径。 它将根据修改后的面积打印圆的新半径,如下所示。 "Radius of Circle is 316.2287731100305" 下一主题Swift 继承 |
我们请求您订阅我们的新闻通讯以获取最新更新。