// // main.swift // Swift存储属性 // // Created by Goddog on 15/7/19. // Copyright © 2015年 Goddog. All rights reserved. // import Foundation print("存储属性是指存储在类、结构体里的变量或常量,可分为实例存储属性和类型存储属性,实例存储属性属于单个实例,类型存储属性属于类型本身") print("枚举不能定义实例存储属性,只有类和结构体才能定义实例存储属性;") print("上一节中结构体Size可以不指定初始值但是要声明为可选类型") struct Size { var width: Int! var height: Int! } var s1 = Size() var s2 = Size(width: 10,height: 20) //MARK: - 实例存储属性与实例变量 //实例存储属性用于保存该类型的实例的状态数据 struct FixedLength { var start: Int let length: Int //定义常量存储属性,可以不指定初始值 } var rg = FixedLength(start: 2,length: 8) print("开始:\(rg.start),长度:\(rg.length)") rg.start = 1 //变量可以重新赋值 //rg.length = 10 //常量不可重新赋值 //MARK: - 结构体常量与实例属性 struct Range { //定义两个变量存储属性 var start: Int var length: Int } let rge = Range(start: 1,length: 2) print("起点:\(rge.start),终点:\(rge.length)") //rge.start = 3 //用let声明的rge实例是不可变的 //rge.length = 4 //MARK: - 延迟存储属性 //延迟存储属性指的是第一次被调用时候才会被计算初始值的属性,用lazy修饰符 class Dept { var id: Int var info: String init(id: Int) { self.id = id //暂停2s NSThread.sleepForTimeInterval(2) self.info = "读取数据库" } } class User { var id: Int = 0 lazy var dept = Dept(id: 10) //延迟加载机制 var nicks = [String]() //数组 } //创建user实例 var user = User() user.nicks.append("曹操") user.nicks.append("刘备") user.nicks.append("孙权") print(user.nicks)