一、类型属性细节
不同于存储实例属性,你必须给存储类型属性设定初始值
因为类型没有像实例那样的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
}