美文网首页
Swift Property

Swift Property

作者: 搬码小能手 | 来源:发表于2021-07-01 13:34 被阅读0次
    Stored Property Computed Property
    Class 支持
    Struct 支持
    enum 不支持

    Computed Property 本质就是方法(函数)

    Stored Property(存储属性)

    关于Stored Property,Swift有明确规定:
    在创建类 或 结构体 的实例时,必须为所有的Stored Property设置一个合适的初始值
    1.可以在初始化器里为存储属性设置一个初始值

    struct Point {
        var x : Int
        var y : Int
        init () {
          x = 11
          y = 22
      }
    }
    

    2.可以分配一个默认的属性值作为属性定义的一部分

    class Point {
        var x : Int = 11
        var y : Int = 22
    }
    

    延迟存储属性(Lazy Stored Property)注意点

    当结构体包含一个延迟存储属性时,只有var才能访问延迟存储属性,
    因为延迟属性初始化时需要改变结构体的内存

    struct TestStruct {
        lazy var age = 1
    }
    
    let ts = TestStruct()
    ts.age
    

    报错:Cannot use mutating getter on immutable value: 'ts' is a 'let' constant

    image.png
    正确的应该是把 let 更改为 var
    struct TestStruct {
        lazy var age = 1
    }
    
    var ts = TestStruct()
    let a = ts.age
    
    

    延迟存储属性(Lazy Stored Property)

    先看非延迟的情况

    class Car {
        func run() {
        }
    }
    
    class Person {
        var car = Car()
    }
    
    let ref = Person()
    struct SPerson {
        var car = Car()
    }
    var val = SPerson()
    //val.car.run()
    print("变量的内存:", Mems.memStr(ofVal: &val))
    

    打印结果为:

    变量的内存: 0x0000000108904c60
    

    再看延迟的情况,加lazy

    class Car {
        func run() {
        }
    }
    
    class Person {
        var car = Car()
    }
    
    let ref = Person()
    struct SPerson {
        lazy var car = Car()
    }
    var val = SPerson()
    //val.car.run()
    print("变量的内存:", Mems.memStr(ofVal: &val))
    

    打印结果为:

    变量的内存: 0x0000000000000000
    

    当调用run方法后:

    class Car {
        func run() {
        }
    }
    
    class Person {
        var car = Car()
    }
    
    let ref = Person()
    struct SPerson {
        lazy var car = Car()
    }
    var val = SPerson()
    val.car.run()
    print("变量的内存:", Mems.memStr(ofVal: &val))
    

    打印结果为:

    变量的内存: 0x0000000108b61640
    

    相关文章

      网友评论

          本文标题:Swift Property

          本文链接:https://www.haomeiwen.com/subject/pgujultx.html