Swift 属性

属性为类、结构体、枚举或它们的实例提供了功能。属性可以存储值、计算值,也可以观察和响应变化。在本章中,我们将详细介绍Swift中的各种属性类型及其使用方法。

存储属性

存储属性是存储在实例中的常量或变量。它们可以在定义时初始化,也可以在实例初始化过程中进行设置。

定义存储属性

在这个例子中,Point 结构体有两个存储属性 xy,它们都是 Double 类型,并且默认值为 0.0

修改存储属性

你可以通过实例来修改存储属性的值。

只读存储属性

只读存储属性只能在初始化过程中设置,并且之后不能更改。

计算属性

计算属性不直接存储值,而是提供一个getter和setter来间接获取和设置其他属性或变量的值。

定义计算属性

-- -------------------- ---- -------
------ --------- -
    --- ----- - ---
    --- ------ - ---
    
    --- ----- ------ -
        ------ ----- - ------
    -
-

--- --------- - ---------------- ---- ------- ----
--------------------- -- -------

在这个例子中,Rectangle 结构体有一个计算属性 area,它返回 widthheight 的乘积。

带有 setter 的计算属性

计算属性可以包含一个可选的 setter,用于设置计算属性的新值。

-- -------------------- ---- -------
------ ------ -
    ------------ --- ---------- - ---
    
    --- ---------- ------ -
        --- -
            ------ ---------- - -
        -
        ----------------- -
            ---------- - ------------ - -
        -
    -
-

--- ------ - ------------------ -----
----------------------- -- -------
---------------- - ----
------------------------ -- -------

在这个例子中,Square 结构体有一个计算属性 perimeter,它可以根据 sideLength 计算出来,同时也可以通过 perimeter 设置新的 sideLength

属性观察器

属性观察器允许你在属性值改变时执行代码。Swift 提供了 willSetdidSet 来实现这一功能。

定义属性观察器

-- -------------------- ---- -------
----- ----------- -
    --- -------- ------ - --- -
        ------------------- -
            --------------- ---------------
        -
        
        ------ -
            -- ------- - ------- -
                ------- - --------
                --------------------- -------------
            -
        -
    -
-

--- ----------- - -------------
------------------- - ---- -- ----------- ----
------------------- - ------ -- ----------- ------
                            --      -------------- ----

在这个例子中,Temperature 类有一个存储属性 celsius,它使用 willSetdidSet 观察器来监控其值的变化。

属性方法

属性方法是定义在类型上的函数,用于访问或修改该类型的属性。

定义属性方法

-- -------------------- ---- -------
------ ------ -
    --- ------- ------
    
    ---- --------------- -- ------ -
        ------ - - --------- - ------
    -
-

--- ------ - -------------- ----
----------------------------- -- --------------------

在这个例子中,Circle 结构体有一个存储属性 radius 和一个计算圆周长的方法 circumference

属性包装

属性包装是一种机制,允许你在属性的 getter 和 setter 中插入自定义行为。

使用属性包装

-- -------------------- ---- -------
----------------
------ -------------- -
    ------- --- ------- --- - -
    
    --- ------------- --- -
        --- - ------ ------ -
        --- -
            -- -------- -- - -
                ------ - --------
            - ---- -
                ------ - -
            -
        -
    -
-

------ ------ -
    --------------- --- ---- ---
-

--- ------ - --------
---------- - --
----------------- -- -----

---------- - --
----------------- -- ----

在这个例子中,PositiveNumber 是一个属性包装器,它确保被包装的值始终是非负的。Person 结构体使用这个属性包装器来定义 age 属性。

以上就是关于 Swift 属性的详细介绍。通过这些知识,你可以更灵活地管理和操作你的数据。

上一篇: Swift 类
下一篇: Swift 方法
纠错
反馈