Swift:執行個體方法和類型方法

來源:互聯網
上載者:User

標籤:swift   enum   執行個體方法和類型方法   

大家對“執行個體方法和類型方法”的概念應該不陌生了,在objective-c中很常見。例如:

1. 執行個體方法(減號開頭)

- (instancetype)init;
調用的時候,必須先進行執行個體化一個對象(alloc), 然後調用init方法。

2. 類型方法(加號開頭)

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations
調用的時候,直接使用UIView的類型就可以了。

而在Swift中寫法有所改變,它使用class和static關鍵字來標示。而且不僅僅是作用在類中,枚舉和結構體(enum, struct)中也有相應的方法。

在class類型上下文中,我們使用class;其他的使用static。

一、作用於結構(註:代碼中,有關儲存屬性及計算屬性的知識,我會在後續章節進行詳細的介紹。)

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)    }}let p = Point(x: 3, y: 4)Point.zeroPoint.onesPoint.add(Point(x: 1, y: 2), p2: Point(x: 2, y: 1))

可以看到,在結構中,我們可以在其屬性或者方法前面加static進行修飾,調用的時候,直接可以通過類型名稱"Point" 出對應的屬性或者方法。


二、作用於類

class Square {    // 類型屬性,用class關鍵字    class var PI: Double{        return 3.14    }}

可以看到,在類中,我們可以在其屬性或者方法前面加class進行修飾,調用的時候,直接Square.PI 就可以了。 代碼中是對“計算屬性”進行了class修飾。而這裡的計算屬性只是簡寫,我們也可以寫成下面的方式:

class Square {    class var PI: Double{        get { return 3.14 }    }}


但需要注意的是,儲存屬性不能使用class進行修飾。

class Student {    class var phone: String?}

編譯後會報錯:“class variables not yet supported”

而用static就可以了。

class Student {    static var phone: String?}


三、作用於協議

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

可以看出,在protocol中定義的屬性或者方法,是在其前面加上static修飾符的,但問題來了, 實現協議有可能是結構體或者枚舉,也有可能是類。那實現體中應該使用什麼修飾符?通過觀察上面的寫法可以看出:

在protocol中定義的方法或者計算屬性,類型修飾符是static;在實現的結構或者枚舉中,修飾符使用static,在實現的class中,修飾符使用class。


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Swift:執行個體方法和類型方法

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.