一、前奏
Swift作为一门新语言,经过几年的发展,逐渐趋于完善,目前已经更新到3.0版本,它汇集许多其他语言的特点,例如JS、Paython、C++等,完全区别于OC。个人感觉它没有完全的OOP和OOD的性质。
二、谈谈几种属性的区别
存储属性
定义:实实在在存储常量和变量的
计算属性
定义:依赖于存储属性,通过计算得出来,它提供getter访问值,提供setter方法间接给其他属性或者变量设置值
类属性
定义:其本质其实就是一个全局属性,在类里限定了其作用域,用关键字static(用于结构体和枚举中)或者class(用于类中)修饰
懒加载属性
定义:该属性在使用的时候初始化一次,用关键字lazy修饰,必须进行初始化,非实例属性懒加载时在大括号{}后面要加上()
全局属性
定义:类外面的属性,作用域全局。类似于OC的static修饰的属性
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //实例属性 let p = Person()
//存储属性 print(p.age)
//懒加载属性 print(p.name)
//类属性 print(Person.height)
//计算属性 print(p.getAge)
//全局属性 print(commonProperty) } } //全局属性 var commonProperty = {()->String in print("Common Property1") return "Common Property" }()
//类型属性,此处struct也可以是enum枚举
struct AnyStructure{
static var storedTypeProperty = "Some value"
static var computedTypeProperty:Int{
return 100
}
} class Person{ //类属性 class var height = {()->Int in print("Static Properties") return 170 }() //存储属性 var age = {()->Int in print("Store properties") return 26 }() //计算属性 var getAge:Int{ get{ print("Computed Properties") return age } } //懒加载属性 lazy var name = {()->String in print("Lazy Properties") return "Lazy liyang" }() //构造方法 init(){ print("init") } }
三、总结:基于类,类的构造
- 存储属性,最先被初始化
- 构造方法,仅次于存储属性调用,可以在这里对存储属性进行赋值
- 懒加载属性、类属性、全局属性都是在第一次使用的时候初始化一次,以后调用都不在初始化
- warning:当懒加载属性是基于一个存储属性计算的时候,切勿使用懒加载属性,采用计算属性