Swift 中表示“類型范圍作用域”這一概念的有兩個(gè)不同的關(guān)鍵字,? static? 和? class
在非 class 的類型 enum, struct 上下文中孝偎,我們統(tǒng)一使用 static 來(lái)描述
struct Point {
let x: Double
let y: Double
// 存儲(chǔ)屬性
static let zeo = Point(x: 0, y: 0)
// 計(jì)算屬性
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 {
// 類型的存儲(chǔ)屬性 , 在 class 中薯蝎,不能使用 class 修飾存儲(chǔ)性屬性德绿,可以修飾計(jì)算性的
static let age = 10
// 類型的計(jì)算性屬性? ? ? ? ? ? ? ? ? ? // 不能調(diào)用實(shí)例的屬性
// 這里的 class 相當(dāng)于 static
class var nameString : String? {
return "\(age) + hello"
}
// 實(shí)例的存儲(chǔ)屬性
var name:String?
var sex = 10
// 實(shí)例的計(jì)算性屬性辕录, 可以調(diào)用類型的屬性(計(jì)算性/存儲(chǔ)性)
var sexString : String? {
return "\(sex) --- \(Student.age)"
}
}
let age = Student.age
let nameString = Student.nameString // "10 + hello"
let sexString = Student().sexString? //? "10 --- 10"