import UIKit var greeting = "Hello, playground" //: ### 结构体 /** 在 Swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分,比如Bool、Int、Double、 String、Array、Dictionary等常见类型都是结构体 - 所有的结构体都有一个编译器自动生成的初始化器(initializer,初始化方法、构造器、构造方法) - 编译器会根据情况,可能会为结构体生成多个初始化器,宗旨是:保证所有成员都有初始值 */ struct Date { // 存储属性 var year: Int var month: Int var day: Int } // 默认的初始化器 var date = Date(year: 2021, month: 12, day: 14) struct Point { var x: Int = 0 var y: Int } var p1 = Point(x: 10, y: 10) // p2使用的初始化方法 Point(y), x会采用默认的值 var p2 = Point(y: 10) //: #### 自定义初始化器 /*: 自定义初始化器 - 一旦在定义结构体时自定义了初始化器,编译器就不会再帮它自动生成其他初始化器 */ struct PointA { var x: Int = 0 var y: Int = 0 init(x: Int, y: Int) { self.x = x self.y = y } } // 结构体 PointA 只有一个自定义的初始化器 var p3 = PointA(x: 12, y: 12) //: #### 结构体内存结构 struct PointB { var x: Int = 0 // 8个字节 var y: Int = 0 var origin: Bool = false } print(MemoryLayout.alignment) // 8 print(MemoryLayout.stride) // 24 print(MemoryLayout.size) // 17