Swift-OOP-Property

2020-11-19  本文已影响0人  守护地中海的花

概念

存储属性(Stored Property)

计算属性(Computed Property)

struct Circle {
    //存储属性
    var radius : Double
    //计算属性
    var diameter:Double {
        set {
            radius = newValue / 2
        }
        get {
            radius * 2
        }
    }
}
var circle = Circle(radius: 10)
print(circle.radius)
print(circle.diameter)

计算属性

image.png

set可以没有 get必须有

set-newValue

set 传入的新值默认叫做newValue,也可以自定义

set(newDiameter) {
    radius = newDiameter / 2
}

get

只读 赋值报错
struct Circle1 {
    var radius: Double
    var diameter:Double {
        get {
            radius * 2
        }
    }
}

var circle1 = Circle1(radius: 10)
print(circle1.diameter)

简写

var diameter:Double {
    radius * 2
}

延迟存储属性

image.png
class Car {
    init() {
        print("Car init!")
    }
    func run() {
        print("Car is running!")
    }
}
let car = Car()
car.run()

class Person {
    lazy var car = Car()
    init() {
        print("Person init")
    }
    func goOut() {
        car.run()
    }
}
let person = Person()
person.goOut()
struct Point {
    var x:Int = 0
    var y:Int = 0
    lazy var z = 0
}
var point = Point()
point.z = 0

属性观察器 (Property Observer)

结构体里面

func PropertyObserver() {
    
    struct Circle {
        var radius : Double {
            willSet {
                print("willSet",newValue)
            }
            didSet {
                print("didSet",oldValue,radius)
            }
        }
        init() {
            self.radius = 1.0
            print("Circle init!")
        }
    }
    
    var circle = Circle()
    print(circle.radius)
    circle.radius = 2.0
    
    
}

变量中应用 (需要初始化哦)

var num1:Int = 10{
    willSet {
        print("willSet",newValue)
    }
    didSet {
        print("didSet oldValue = \(oldValue)")
    }
}
num1 = 300
print(num1)

类型属性

struct Dog {
    static var count:Int = 0
    init() {
        Dog.count += 1
    }
}

let dog = Dog()
print(Dog.count)
上一篇下一篇

猜你喜欢

热点阅读