Swift 中表示“类型范围作用域”这一概念的有两个不同的关键字, static 和 class
在非 class 的类型 enum, struct 上下文中,我们统一使用 static 来描述
struct Point {
let x: Double
let y: Double
// 存储属性
static let zeo = Point(x: 0, y: 0)
// 计算属性
static var ones: [Point]{
return [Point(x: 1, y: 1),
Point(x: -1, y: 1),
Point(x: 1, y: -1),
Point(x: -1, y: -1)]
}
// 类型方法
static func add(p1: Point, p2: Point) -> Point {
return Point(x: p1.x + p2.x, y: p1.y + p2.y)
}
}
let pA = Point(x: 0, y: 1)
print(pA.x)
print(Point.zeo)
class Student {
// 类型的存储属性 , 在 class 中,不能使用 class 修饰存储性属性,可以修饰计算性的
static let age = 10
// 类型的计算性属性 // 不能调用实例的属性
// 这里的 class 相当于 static
class var nameString : String? {
return "\(age) + hello"
}
// 实例的存储属性
var name:String?
var sex = 10
// 实例的计算性属性, 可以调用类型的属性(计算性/存储性)
var sexString : String? {
return "\(sex) --- \(Student.age)"
}
}
let age = Student.age
let nameString = Student.nameString // "10 + hello"
let sexString = Student().sexString // "10 --- 10"