9.4 Swift延迟存储属性

前端之家收集整理的这篇文章主要介绍了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)

原文链接:https://www.f2er.com/swift/322419.html

猜你在找的Swift相关文章