周末因为一些感情原因停更了。。。补上。。。不过我也得先复习下以前的
一,属性
惊了,这个也太简单了,几乎无缝过渡
1,概念
其实说白了就是类或结构体里面的变量
稍有不同的是,swift的属性也是可以有var和let的,如果是let就叫常量属性,只能在初始化的时候赋值
class family {
init(s: String, d:String, m:String) {
son = s
dad = d
mom = m
}
let son = "Default"
var dad = "Default"
var mom = "Default"
}
var Dumphy = family(s: "Luke", d: "Phil", m: "Clair")
var Pre = Dumphy
Pre.son = "Mitch"
print(Dumphy.son) // output: Mitch
如果这样写,就会报错不能改变let常量的值
此外还得注意上次说的,类 是个引用类型的问题
2,懒惰存储属性
懒惰属性的意思就是在实例化类的时候如果没有声明,就不初始化的属性
懒惰属性只能是var,不能是let
用处主要都是在project上
用法如下
class DataImporter {
/*DataImporter is a class to import data from an external file. The class is assumed to take a non-trivial amount of time to initialize.*/
var fileName = "data.txt"
// the DataImporter class would provide data importing functionality here
}
class DataManager {
@lazy var importer = DataImporter()
var data = String[]()
// the DataManager class would provide data management functionality here
}
let manager = DataManager()
manager.data += "Some data"
manager.data += "Some more data"
// the DataImporter instance for the importer property has not yet been created
在一开始实例化DataManager类的时候,是不会实例化DataImporter类的,只有需要调用到importer属性的时候才会实例化
3,计算属性
这是swift提供的一个很自动化的特性
简单的说,就是在声明变量属性(不能是常量)的时候,再设置get和set方法,这样之后再使用该属性的时候,就可以自动化完成get和set操作,这对于一些需要根据其它属性而变的属性来说简直是神器
贴代码
class family {
init(s: String, d:String, m:String) {
son = s
dad = d
mom = m
}
var son = "Default"
var dad = "Default"
var mom = "Default"
var allmember:String {
get {
return dad + " " + mom + " " + son
}
set(str) {
}
}
}
var Dumphy = family(s: "Luke", d: "Phil", m: "Clair")
print(Dumphy.allmember)
在这段代码中,all member会因为其它三个属性不同而变动,而有了计算属性这个特性,这些都可以自动化完成
注意,如果把set方法取掉,那这个属性就变成了只读计算属性,这时候将不允许对其进行赋值操作(跟let作用一样),不过区别在于,get操作依然可以做一些自动化操作
4,观察者属性
观察者属性与懒惰属性互斥,不能两者都是
其实观察者属性有点像计算属性,都是会自动化一些操作
观察者属性会监视某个属性的变化,只要有对其赋值操作,都会触发观察者
语法如下
class family {
init(s: String, d:String, m:String) {
son = s
dad = d
mom = m
}
var son = "Default"
var dad = "Default"
var mom = "Default" {
willSet(str) {
print(str + "will")
}
didSet {
print(mom)
}
}
var allmember:String {
get {
return dad + " " + mom + " " + son
}
set(str) {
}
}
}
var Dumphy = family(s: "Luke", d: "Phil", m: "Clair")
print(Dumphy.allmember)
Dumphy.mom = "me"
willSet在赋值前完成,didSet在赋值后完成
今天状态一般,只说一个吧,明天不断更