import UIKit
var str = "Hello, playground"
class DHButton: UIButton {
/*
1、存储属性: 就是存储一个常量或变量,懒加载也属于存储型属性。
*/
/*Swift中有储值属性和计算属性,一般我们应该是给计算属性添加get和set方法
“除存储属性外,类、结构体和枚举可以定义计算属性,计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter
来间接设置其他属性或变量的值。”,这个功能的重点作用应该是在计算上。
*/
/*
1.计算型属性和懒加载的区别
a.计算型属性,不储存内容,不占用内存空间本身,都是通过计算获得结果,类似于一个函数,没有参数,有返回值。
b.懒加载,会在第一次访问执行,闭包结束后,会把结果存在属性中,后续调用,直接返回属性的内容,懒加载的属性会分配空间存储值。
*/
/*
2.计算型属性和懒加载的区别
a.Swift 中可以用willSet 和 didSet 来实现按钮的状态切换。
b.使用set必须要用get;但是get可以单独使用(只有get的叫只读计算属性)
c.重写一些类的属性的set get方法
d.Swift 中get,set被称之为“计算属性”,它用来间接获取/改变其他属性的值。
*/
override var isHighlighted: Bool {
get {
return super.isHighlighted
}
set {
super.isHighlighted = newValue
}
}
var variable1 : Int = 0 {
// It's a store property (存储属性)
willSet(newValue) {
print ("willSet called")
}
didSet {
print ("didSet called---\(variable1)")
}
}
var _parame: Int = 0
var variable2: Int {
// It's a Computed Proprties (计算属性)
get {
return _parame
}
set {
// 有个newValue和oldValue 属性,set方法可以把(newValue)省略
_parame = newValue
}
}
var name: String = "ggg" {
willSet {
print("willSet---\(String(describing: name))")
print("newValue----\(String(describing: newValue))")
}
didSet {
print("oldValue----\(String(describing: oldValue))")
print("didSet----\(String(describing: name))")
}
}
}
var btn: DHButton = DHButton()
btn.variable1 = 2
print("variable1----\(btn.variable1)")
btn.name = "hgg"
print("name------\(btn.name)")
print("variable2------\(btn.variable2)")
struct Person {
var firstName = "San"
var lastName = "Zhang"
var fullName: String {
get {
return firstName + "." + lastName
}
set {
var name = newValue.components(separatedBy: ".")
firstName = name[0]
lastName = name[1]
}
}
}
var p = Person()
p.fullName
p.fullName = "Si.Lee"
p.firstName
p.lastName