12-Swift之屬性

1、什么是屬性

屬性是對象的性質與對象之間關系的統稱。屬性就是變量或者常量,附著到類的實例中。

2、存儲屬性

        /**
         存儲屬性
         */
        class Car {
            var  priceValue = 0
        }
        /* 獲取實例 */
        let myCar = Car()
        print(myCar.priceValue)
        /**
         注釋: priceValue 是存儲在對象中的一個簡單值,它稱為存儲屬性。
         */

3、計算屬性

1、什么是計算屬性

要定義一個計算屬性,可以像聲明存儲屬性一樣聲明一個變量,但在后面增加大括號。在這些大括號內部,提供一個get部分,還可以提供一個set部分。

2、計算屬性的創建
        class NetWorkRectangle  {
            var width:Double = 0.0
            var height = 0.0
            /* 面積*/
            var area:Double  {
                /* 計算面積*/
                get {
                  return width * height
                }
                /* 計算寬高 */
                set {
                    width = sqrt(newValue)
                    height = sqrt(newValue)
                }
            }
        }
3、計算屬性的調用
        /* 創建實例*/
        let rect = NetWorkRectangle()
        rect.width = 100
        rect.height = 200
        print(rect.area)
        /* 輸出:20000.0 */
        rect.area = 1000
        print(rect.width,rect.height)
        /* 輸出: 31.6227766016838 31.6227766016838 */

4、屬性觀察器

1、什么是屬性觀察器

所謂的觀察屬性是指屬性發生變化的時候,會執行某些代碼。這個代碼可以在即將發生變化之前或者剛剛發生變化之后運行。

2、如何定義一個屬性觀察器

要創建一個屬性觀察器,需要在屬性后面添加大括號,并包含willSet 和didSet代碼塊。這些代碼塊分別獲得一個參數---willSet 在屬性值發生變化之前被調用,他將獲得一個將要設定的值,而didSet 則獲取一個舊值

3、屬性觀察器的例子
        class PropertyObserver {
            var number:Int = 0 {
                willSet(newValue) {
                   print("willSet  to  \(newValue)")
                }
                didSet(oldValue){
                  print("oldValue fo \(oldValue) to \(self.number)")
                }
            }
        }
        /**
         注釋:關于你對屬性的實際處理方式,屬性觀察器不會進行任何更改,它們只是在屬性變化前后增加附加行為。
         */
4、屬性觀察器的使用
        /* 創建實例 */
        var observer = PropertyObserver()
        /* 給其屬性賦值,查看其變化*/
        observer.number = 150
        /* 輸出 : 
         willSet  to  150
         oldValue fo 0 to 150
         */

5、懶惰性屬性

1、什么是懶惰性屬性

懶惰性就是直到首次訪問時才會設定屬性。設置懶惰性的方法:為了將一個屬性定義為懶惰性,可以在它的前面放一個 lazy 的關鍵字

2、懶惰性屬性的例子
        class Log{
            init(id :Int) {
                 print(" Example class \(id) created")
            }
        }
        
        class lazyExample {
            var number = Log(id:110)
            lazy var numberLazy = Log(id:220)
            init() {
                 print("init  lazyExample")
            }
        }
3、懶惰性的調用
        /* 創建實例對象*/
        var LazyObject = lazyExample()
        /*輸出: Example class 110 created */
        var ob = LazyObject.number
        /*輸出:無
         因為:number 對象已經創建
         */
        var ob1 = LazyObject.numberLazy
        /**
         輸出:init  lazyExample
         Example class 220 created 
         */
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Swift語法基礎(五)-- (類和結構體、屬性、方法) 本章將會介紹 類和結構體對比結構體和枚舉是值類型類是引用...
    寒橋閱讀 1,103評論 0 1
  • 屬性將值跟特定的類、結構或枚舉關聯。存儲屬性存儲常量或變量作為實例的一部分,而計算屬性計算(不是存儲)一個值。計算...
    窮人家的孩紙閱讀 419評論 0 0
  • 1.存儲屬性 簡單來說,一個存儲屬性就是存儲在特定類或結構體實例里的一個常量或變量。存儲屬性可以是變量存儲屬性(用...
    思考的快與慢閱讀 324評論 0 0
  • 主要涵蓋JS中的面向對象內容,包括對象的基本操作、原型、原型鏈、作用域、閉包。... 請右鍵復制圖片地址,粘貼到瀏...
    Mr_XangYang閱讀 186評論 0 0
  • 先梳理一下今天的安排: 8點20起床,洗個澡,然后出門吃早餐。 9點20——13點,思考了和制作了app的用戶流程...
    又已是十年閱讀 713評論 0 2