59 lines
1.5 KiB
Swift
59 lines
1.5 KiB
Swift
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<PointB>.alignment) // 8
|
||
print(MemoryLayout<PointB>.stride) // 24
|
||
print(MemoryLayout<PointB>.size) // 17
|