舊文:
static在Swift 中表示 「類型範圍做用域」,這一律念有兩個不一樣的關鍵字,它們分別是
static 和 class 。在非 class 的類型上下文中,咱們統一使用 static 來描述類型做用域,class 關鍵字 是專門用在 class 類型的上下文中的,能夠用來修飾類方法以及類的計算屬性。類方法就是靜態方法,經過類類型能直接調用。
class 中如今是不能出現類的(靜態)存儲屬性的,咱們若是寫相似這樣的代碼的話:
class MyClass { class var bar: Bar? }
編譯時會獲得一個錯誤:ide
這主要是由於在 Objective-C 中就沒有類變量這個概念,爲了運行時的統一和兼容,暫時不太方便添加這個特性。Apple 表示從此將會考慮在某個升級版本中實裝 class 類型的類存儲變量,如今的話,咱們只能在 class 中用 class 關鍵字聲明方法和計算屬性。
|
「static」 methods and properties are now allowed in classes (as an alias for class final). You are now allowed to declare static stored properties in classes, which have global storage and are lazily initialized on first access (like global variables).
|
struct Point {
let x: Double let y: Double // 存儲屬性 static let zero = 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) }
}
class SomeClass {
static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { return 27 } class var overrideableComputedTypeProperty: Int { return 107 } static var storedClassProp = "class property not OK"
}
|