Swift学习之属性

来源:互联网 发布:算法设计与分析陈慧南 编辑:程序博客网 时间:2024/05/27 01:01

属性

1.存储属性 就是存储在特定类或者结构体的实例的一个变量或者常量

struct FixedLengthRange {    var firstValue = 3    var length = 4}let fixLengthRange = FixedLengthRange()print(fixLengthRange.firstValue)//fixLengthRange.firstValue = 4 因为fixLengthRange 是常量,其所有的属性值都不能在被修改class dataImporter {    var fileName = "test.txt"}class dataManager {    //必须被初始化    lazy var importer = dataImporter()    var data = [String]()}let manager = dataManager()//importer现在还没被创建manager.data.append("some data")manager.data.append("another data")print(manager.importer.fileName)//importer现在被创建

2.计算属性

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)        }        //1.第一种setter方式        //set(newCenter){            //origin.x = newCenter.x - (size.width/2)            //origin.y = newCenter.y - (size.height/2)        //}        //2.第二种setter方式        set{            origin.x = newValue.x - (size.width/2)            origin.y = newValue.y - (size.height/2)        }    }}var square = Rect(origin:Point(x: 3, y: 3), size:Size(width: 3, height: 3))print(square)//如果一个计算属性只是可读的,可以省略get{}struct Cubiod {    var width = 0.0    var volume :Double {        return width * width * width    }}

3.属性观察器 observer

willSet :在属性的值在被赋值之前调用

didSet:在属性的值被赋值之后调用

class StepCounter {    var totalSteps:Int = 0 {        willSet{            print("totalSteps is \(newValue)")        }        didSet{            if totalSteps > oldValue{                print("totalSteps is big than oldValue")            }        }    }}var stepCounter = StepCounter()stepCounter.totalSteps = 10//类属性,用static来声明,用类或者结构体、枚举来访问,而不是类或者结构体、枚举的实例对象也访问
0 0