Swift 例項方法和型別方法

2021-07-04 08:12:08 字數 1665 閱讀 3390

歡迎**。

大家對「例項方法和型別方法」的概念應該不陌生了,在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 

// 型別方法

static func add(p1: point, p2: point) -> point

}let p = point(x: 3, y: 4)

point.zero

point.ones

point.add(point(x: 1, y: 2), p2: point(x: 2, y: 1))

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

二、作用於類

class square 

}

可以看到,在類中,我們可以在其屬性或者方法前面加class進行修飾,呼叫的時候,直接square.pi 就可以了。 **中是對「計算屬性」進行了class修飾。而這裡的計算屬性只是簡寫,我們也可以寫成下面的方式:

class square 

}}

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

class student

編譯後會報錯:「class variables not yet supported」

而用static就可以了。

class student

三、作用於協議

protocol myprotocol 

struct mystruct: myprotocol

}class myclass

}

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

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

Swift 例項方法

例項方法 1 例項方法 print 1 例項方法 class mypoint func showpoint func setpoint x double,y double 預設第一引數作為內部引數,第二個及以後既作為內部有作為外部引數 setpoint x 10.0,10.0 var p0 mypo...

swift型別方法

例項方法是被型別的某個例項呼叫的方法。你也可以定義型別本身呼叫的方法,這種方法就叫做型別方法。宣告類的型別方法,在方法的func關鍵字之前加上關鍵字class 宣告結構體和列舉的型別方法,在方法的func關鍵字之前加上關鍵字static。注意 在objective c 裡面,你只能為objectiv...

swift 的型別屬性和方法

型別屬性 使用關鍵字static來定義結構體和列舉的型別屬性,關鍵字class來為類定義型別屬性。語法 struct structname enum enumname class classname 類似於例項的屬性,型別屬性的訪問也是通過點運算子 來進行。但是,型別屬性是通過型別本身來獲取和設定,...