swift_044(Swift 计算属性和存储属性的概念以及使用)

来源:互联网 发布:do as infinity 知乎 编辑:程序博客网 时间:2024/06/08 15:30

import UIKit


var str = "Hello, playground"


class DHButton: UIButton {

    /*

     1、存储属性:就是存储一个常量或变量,懒加载也属于存储型属性。

     */

    /*Swift中有储值属性和计算属性,一般我们应该是给计算属性添加getset方法

     “除存储属性外,类、结构体和枚举可以定义计算属性,计算属性不直接存储值,而是提供一个 getter来获取值,一个可选的 setter

     来间接设置其他属性或变量的值。”,这个功能的重点作用应该是在计算上。

     */

    

    /*

     1.计算型属性和懒加载的区别

     a.计算型属性,不储存内容,不占用内存空间本身,都是通过计算获得结果,类似于一个函数,没有参数,有返回值。

     b.懒加载,会在第一次访问执行,闭包结束后,会把结果存在属性中,后续调用,直接返回属性的内容,懒加载的属性会分配空间存储值。

     */

    

    /*

     2.计算型属性和懒加载的区别

     a.Swift 中可以用willSet didSet来实现按钮的状态切换。

     b.使用set必须要用get;但是get可以单独使用(只有get的叫只读计算属性)

     c.重写一些类的属性的set get方法

     d.Swift get,set被称之为计算属性,它用来间接获取/改变其他属性的值。

    */

    

    overridevar isHighlighted: Bool {

        get {

            returnsuper.isHighlighted

        }

        set {

            super.isHighlighted = newValue

        }

    }

    

    var variable1 :Int = 0 {

        // It's a store property  (存储属性)

        willSet(newValue) {

            print ("willSet called")

        }

        didSet {

            print ("didSet called---\(variable1)")

        }

    }

    

    var _parame:Int = 0

    var variable2:Int {

        // It's a Computed Proprties (计算属性)

        get {

            return_parame

        }

        set {

             // 有个newValueoldValue属性,set方法可以把(newValue)省略

            _parame = newValue

        }

    }

    

    var name:String = "ggg" {

        willSet {

            print("willSet---\(String(describing:name))")

            print("newValue----\(String(describing: newValue))")

        }

    

        didSet {

            print("oldValue----\(String(describing: oldValue))")

            print("didSet----\(String(describing:name))")

        }

    }

    

}


var btn: DHButton =DHButton()

btn.variable1 =2

print("variable1----\(btn.variable1)")


btn.name ="hgg"

print("name------\(btn.name)")


print("variable2------\(btn.variable2)")




struct Person {

    var firstName ="San"

    var lastName ="Zhang"

    

    var fullName:String {

        get {

            returnfirstName +"." +lastName

        }

        set {

            var name = newValue.components(separatedBy:".")

            firstName = name[0]

            lastName = name[1]

        }

    }

}


var p = Person()

p.fullName


p.fullName ="Si.Lee"

p.firstName

p.lastName


阅读全文
0 0