9.4 Swift延迟存储属性

        /**

         4)延迟存储属性

         Swift语言中所有的存储属性必须有初始值,也就是当构造完一个类或者结构体的对象后;

         对象中所有的存储属性必须有初始值(这是这个语言要求的),但是也有例外,

         其中延迟存储属性可以将属性的初始化向后推迟到该属性第一次被调用的时候。

         

         1.这个属性不适合一开始初始化,取决于外部的很多因素;

         2.属性有可能我们从来不用,但是它的初始化又需要较长时间;

         必须将延迟存储属性声明成变量(使用var关键字),因为属性的值在实例构造完成之前可能无法得到。而常量属性在构造过程完成之前必须要有初始值,因此无法声明成延迟属性。

         */

        

        struct MyStudent {

            var name: String

            var chinese: Double

            var math: Double

            

            func showMySelf() -> Void {

                print("姓名:\(name), 语文成绩:\(chinese), 数学成绩:\(math)")

            }

        }

     

        class MyClass {

            var members:[MyStudent] = []

            

            // 班级里面所有学生的平均成绩

            // 按照该语言的特性,这里必须要有一个初始值,但是我们一开始没办法知道平均成绩的值

            // 给它一个初始值0,也没有意义,不是真实的成绩。那么这里我们把它设为延迟存储属性lazy

            lazy var score: Double = MyClass().getScore()

            

            

            

            func getScore() -> Double {

                

                print("test lazy property")

                var t: Double = 0.0

                

                for i in members {

                    t += i.chinese

                    t += i.math

                }

                

                if members.count > 0 {

                    return t / Double(members.count)

                } else {

                    return 0

                }

            }

            

            func show() -> Void {

                for i in members {

                    i.showMySelf()

                }

            }

        }

        

        let s0 = MyStudent.init(name: "zhangsan", chinese: 100.0, math: 100.0)

        let s1 = MyStudent.init(name: "lisi", chinese: 90.0, math: 90.0)

        

        

        let c0 = MyClass.init()

        c0.members.append(s0)

        c0.members.append(s1)

        

        c0.show()

        

//        print(c0.getScore())

        

        

        print("***********************")

        // 我们看到打印 test lazy property

        print(c0.score)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值