1. 程式人生 > >Swift_關鍵字static和class的區別

Swift_關鍵字static和class的區別

  • 說明:

    • class關鍵字除了有自定義類的作用, 還有宣告類方法的作用.
  • 此文章由 @春雨 編寫. 經 @Scott 稽核. 若轉載此文章,請註明出處和作者

程式碼


import UIKit


class Person {

    // 給方法新增class關鍵字
    class func work() {
        print("Type Method: Person: 警察.")
    }

    // 使用static關鍵字建立類方法
    static func nameOfPerson(name: String) {
        print("Type Method: Person name: \(name)"
) } // 可以和類方法重名, 以及一樣的引數. func nameOfPerson(name: String) { print("Instance Method: person name \(name)") } } class Teacher: Person { // 重寫父類的型別方法. override class func work() { print("Type Method: Teacher: University Teacher") } /** * 下面的寫法是錯誤的, 報錯資訊: Class method overrides a 'final' class method(重寫了一個final的類方法.) * final 關鍵字: 可以通過把方法,屬性或下標標記為final來防止它們被重寫,只需要在宣告關鍵字前加上final修飾符即可(例如:final var,final func,final class func,以及final subscript)。如果你重寫了final方法,屬性或下標,在編譯時會報錯。 */
// override static func nameOfPerson(name: String) { // // } } class Student: Person { // 子類Student的例項方法work(), 和父類的類方法work()沒有關係, 二者不在同一個級別上, 不存在同名問題. func work() { print("Instance Method: Student: University Student") } } class ViewController: UIViewController { override func viewDidLoad() { super
.viewDidLoad() let per = Person() // 父類的類方法 Person.work() /**< Type Method: Person: 警察. */ Person.nameOfPerson("Tom") /**< Type Method: Person name: Tom */ // 父類的例項方法 per.nameOfPerson("Edward") /**< Instance Method: person name Edward. */ // 子類的類方法 // 直接呼叫父類的類方法 Teacher.nameOfPerson("Susan") /**< Type Method: Person name: Susan */ // 呼叫的是子類中重寫父類的類方法work() Teacher.work() /**< Type Method: Teacher: University Teacher */ let stu = Student() // 子類Student的例項方法work() stu.work() /**< Instance Method: Student: University Student */ } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

總結

1. 關鍵字static和class的區別

在方法的func關鍵字之前加上關鍵字static或者class都可以用於指定類方法.
不同的是用class關鍵字指定的類方法可以被子類重寫, 如下: 
    override class func work() {
    print("Teacher: University Teacher")
}

但是用static關鍵字指定的類方法是不能被子類重寫的, 根據報錯資訊: Class method overrides a 'final' class method. 
我們可以知道被static指定的類方法包含final關鍵字的特性--防止被重寫. 

2. 類方法和例項方法可以重名.

不建議寫相同的方法名.