一、类型属性细节
不同于存储实例属性,你必须给存储类型属性设定初始值
因为类型没有像实例那样的init初始化器来初始化存储属性
存储类型属性默认是lazy,会在第一次使用的时候才初始化
就算被多个线程同时访问,保证只会初始化一次
存储类型属性可以是let
枚举类型也可以定义类型属性(存储类型属性、计算类型属性)
二、单例模式
因为类型属性是只有一份内存,所以可以用于单例的实现。
- struct Shape {
- static let width: Int = 0
- }
-
- enum ShapeEnum {
- static var width: Int = 0
- case s1, s2, s3, s4
- }
-
- class FileManager {
- public static let shared = FileManager()
-
- private init() {
- }
-
- func open() {
- }
-
- func close() {
- }
- }
-
- struct Point {
- var x: Int
- var y: Int
- }