Swift - Static和Class

static 和 class

在Swift中static和class都表示“類型範圍作用域”的關鍵字。在所有類型中(class、static、enum)中,我們可以使用static來描述類型作用域。class是專門用於修飾class類型的。


static可以修飾屬性和方法

class Person {
    // 存儲屬性
    static let age: Int = 20

    // 計算屬性
    static var wotkTime: Int {
         return 8
    }
    // 類方法
    static func sleep() {
        print("sleep")
    }
}

但是所修飾的屬性和方法不能夠被重寫,也就是說static修飾的類方法和屬性包含了final關鍵字的特性。重寫會報錯如下:


class修飾方法和計算屬性

我們同樣可以使用class修飾方法和計算屬性,但是不能夠修飾存儲屬性


而且類方法和計算屬性是可以被重寫的,可以使用class關鍵字也可以是static

class Student: Person {
    
//    使用class
//    override class func sleep() {
//    }
//    override class var workTime: Int {
//        return 10
//    }

    // 使用static
    override static func sleep() {
    }
    override static var workTime: Int {
        return 10
    }
}

static和protocol

Swift中的class,struct,enum都可以實現某個指定的協議。如果我們想在protocol中定義一個類型作用域上的方法或者計算屬性,應該使用哪個關鍵字?答案顯而易見,肯定是static,因爲static是通用的。注意:在使用protocol的時候,在enum和struct中仍然使用static進行修飾,在class中,class和static都可以使用。

protocol MyProtocol {
    static func foo() -> String
}

struct MyStruct: MyProtocol {
    static func foo() -> String {
        return "MyStruct"
    }
}

enum MyEnum: MyProtocol {
    static func foo() -> String {
        return "MyEnum"
    }
}

class MyClass: MyProtocol {
    // 在 class 中可以使用 class
    class func foo() -> String {
        return "MyClass.foo()"
    }

    // 也可以使用 static
    static func bar() -> String {
        return "MyClass.bar()"
    }
}

參考:

static和class


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章