0
点赞
收藏
分享

微信扫一扫

swift5.1学习-8.属性

凛冬已至夏日未远 2022-02-02 阅读 59

1.Swift中跟实例相关的属性可以分为2大类

存储属性(Stored Property)

计算属性(Computed Property)

struct Circle { // 存储属性
    var radius: Double
    // 计算属性
    var diameter: Double {
        set {
            radius = newValue / 2
        } 
        get {
            radius * 2 
         }
    }
 }

2.延迟存储属性(Lazy Stored Property)

使用lazy可以定义一个延迟存储属性,在第一次用到属性的时候才会进行初始化
lazy var car = Car()
如果多条线程同时第一次访问lazy属性 p无法保证属性只被初始化1次

class Car {
    init() {
        print("Car init!")
    }
    func run() {
        print("Car is running!")
} }
class Person {
    lazy var car = Car()
    init() {
        print("Person init!")
    }
    func goOut() {
        car.run()
} }

3.属性观察器(Property Observer)

可以为非lazyvar定义的存储属性设置属性观察器

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

4.类型属性(Type Property)

1.实例属性(Instance Property)

2.类型属性(Type Property)

struct Car {
    static var count: Int = 0
    init() {
        Car.count += 1
    }
}
print(Car.count) // 3

5.单例模式

public class FileManager {
    public static let shared = FileManager()
    private init() { }
}
public class FileManager {
    public static let shared = {
        // ....
        // ....
        return FileManager()
}()
    private init() { }
}
举报

相关推荐

0 条评论