Swift 属性

//属性:主要作用是存储数据,可以常量属性和变量属性
struct Fix {
    var first : Int
    let len : Int
}
var rang = Fix(first: 0, len: 3)
//let rangs = Fix(first: 0, len: 3)
//let类型 初值一旦指定便不可修改
rang.first = 6
print(rang)
//延时存储属性 : 初始化时不分配值,直到第一次使用它,属性lazy声明
//使用的几率少的情况下使用lazy
class DataI {
    var file = "data.txt"
}
class DataM {
    lazy var impor = DataI()
    var data = ""
}
let manager = DataM()
//这个时候并没有访问impor这个属性
manager.data += "SomeData"
manager.data += "SomeMore"
print(manager.impor.file,manager.data)
//计算属性
struct Point {
    var x = 0.0 , y = 0.0
}
struct Size {
    var width = 0.0, height = 0.0
}
struct Rect {
    var origin = Point()
    var size = Size()
    var center: Point {
        get {
            let centerX = origin.x + (size.width / 2)
            let centerY = origin.y + (size.height / 2)
            return Point(x: centerX, y: centerY)
        }
        set(newCenter) {
            origin.x = newCenter.x - (size.width / 2)
            origin.y = newCenter.y - (size.height / 2)
        }
    }
}
var square = Rect(origin: Point(x: 0.0, y: 0.0),
    size: Size(width: 10.0, height: 10.0))
let squareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
print("正方形原点(\(square.origin.x), \(square.origin.y))")
//属性观察者
//willSet观察者是在存储之前调用
//didSet新值存储后调用
//例1
class StepC {
    var totalS: Int = 0 {
        willSet(newTS) { //新值
            print("新值--\(newTS)")
        }
        didSet{  //旧值
            if totalS > oldValue {
                print("新值 - 旧值--\(totalS - oldValue)")
            }
        }
    }
}
let stepC = StepC()
stepC.totalS = 200
stepC.totalS = 360
stepC.totalS = 896

//例2
class Employee {
    var no: Int = 0
    var name: String = "Tony" {
        willSet(newNameValue) { //定义name属性的willSet观察者,newNameValue是由我们分配的传递新值的参数名
            print("员工name新值:\(newNameValue)")
        }
        didSet(oldNameValue) { //定义name属性的didSet观察者,oldNameValue是由我们分配的传递旧值的参数名
            print("员工name旧值:\(oldNameValue)")
        }
    }
    var job: String?
    var salary: Double = 0
    var dept: Department?
}
struct Department {
    var no: Int = 10 {
        willSet { //定义no属性的willSet观察者,注意这里没有声明参数,但是我们可以在观察者内部使用newValue
            print("部门编号新值:\(newValue)")
        }
        didSet { //定义no属性的didSet观察者,注意这里也没有声明参数,但是我们可以在观察者内部使用oldValue
            print("部门编号旧值:\(oldValue)")
        }
    }
    var name: String = "RESEARCH"
}
var emp = Employee()
emp.no = 100
emp.name = "Smith"
var dept = Department()
dept.no = 30
//静态属性
struct Audio {
    static let three = 10
    static var max = 0
    var current:Int = 0 {
        didSet {
            if current > Audio.three {
                current = Audio.three
            }
            if current > Audio.max {
                Audio.max = current
            }
        }
    }
}
var left = Audio()
left.current = 7
print(left.current)
//调用的时候直接使用类或结构体名调用
print(Audio.max)
//print(left.max) //错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值