swift学习日记(五) 属性

周末因为一些感情原因停更了。。。补上。。。不过我也得先复习下以前的


一,属性

惊了,这个也太简单了,几乎无缝过渡

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在赋值后完成


今天状态一般,只说一个吧,明天不断更



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值