詳解Swift面向對象編程中的辦法(method)。本站提示廣大學習愛好者:(詳解Swift面向對象編程中的辦法(method))文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Swift面向對象編程中的辦法(method)正文
struct Point { var x:Double var y:Double mutating func move(x:Double,y:Double) { self = Point(x: self.x+x,y: self.y+y) } static func name(){ print("Point") } } Point.name()
一、引言
辦法只是一個術語,其實就是將函數與特定的類型結合,類、構造體、枚舉都可以定義辦法,辦法又分為實例辦法和類型辦法,類型辦法相似於Objective-C中的類辦法。Swift和Objective-C的一大不同是,Objective-C只要在類中可以定義辦法。
二、實例辦法根底
實例辦法的語法和函數完全分歧,其和詳細類型的實例所關聯,實例辦法在調用時由類型的實例點語法停止調用來完成一些功用模塊。示例如下:
class Math { //完成加法功用的實例辦法 func add(param1:Double,param2:Double)->Double{ return param1+param2 } } //創立類型實例 var obj = Math() //調用辦法停止計算 obj.add(5, param2: 5)
與Objective-C相似,Swift中每一個類的實例中都隱藏含有一個self屬性,self屬性就是實例自身,開發者可以在實例辦法中運用self來調用屬性或許其他實例辦法,示例如下:
class Math { //完成加法功用的實例辦法 func add(param1:Double,param2:Double)->Double{ return param1+param2 } func mul(param1:Double,param2:Double) -> Double { //運用self調用實例辦法 self.add(param1, param2: param2) return param1*param2 } }
但是,Swift並不要求開發者必需寫self,默許狀況下,開發者可以直接省略self來調用屬性和辦法:
class Math { //完成加法功用的實例辦法 func add(param1:Double,param2:Double)->Double{ return param1+param2 } func mul(param1:Double,param2:Double) -> Double { //運用self調用實例辦法 add(param1, param2: param2) return param1*param2 } }
有一種狀況需求留意,關於屬性的調用,假如辦法中的參數名和類實例的屬性名相反,則必需運用self來調用類的實例屬性,避免歧義的發生:
class Math { var param1 = 10.0 //完成加法功用的實例辦法 func add(param1:Double,param2:Double)->Double{ //這裡將運用param1=10,假如不加self 將運用參數中的param1 return self.param1+param2 } func mul(param1:Double,param2:Double) -> Double { //運用self調用實例辦法 add(param1, param2: param2) return param1*param2 } }
三、在實例辦法中修正值類型的值
首先需求清楚一個概念,Swift中有兩品種型,值類型和援用類型,詳細在類、構造體、枚舉一節中有相關引見,這裡需求留意的是,關於值類型,即構造體和枚舉,其並不能直接在實例辦法中修正實例屬性的值,Swift中提供了另一種方式,假如真有如此的需求,開發者可以運用mutating關鍵字將實例辦法聲明成可變的,實踐上,假如在可變的實例辦法中修正了值類型屬性的值,是會創立一個新的實例來替代原來的實例的,示例如下:
struct Point { var x:Double var y:Double mutating func move(x:Double,y:Double) { self.x+=x self.y+=y } } var point = Point(x: 1, y: 1) print(point) point.move(3, y: 3) print(point)
在值類型實例的可變辦法中修正屬性的值,實踐上就是創立了一個新的實例,下面的寫法和上面的寫法原理是一樣的:
struct Point { var x:Double var y:Double mutating func move(x:Double,y:Double) { self = Point(x: self.x+x,y: self.y+y) } }
四、類型辦法
正照實例辦法是經過類型的實例來停止調用的,類型辦法是經過類型直接來調用的,相比於實例辦法,類型辦法中的self指以後類型,異樣開發者可以運用self來區別類型屬性和類型辦法中的參數。運用Static關鍵字來停止類型辦法的創立:
假如是在類中創立類型辦法,若此辦法可以被子類停止重寫,則應該運用class關鍵字來創立,示例如下:
class Math { var param1 = 10.0 //完成加法功用的實例辦法 func add(param1:Double,param2:Double)->Double{ //這裡將運用param1=10,假如不加self 將運用參數中的param1 return self.param1+param2 } func mul(param1:Double,param2:Double) -> Double { //運用self調用實例辦法 add(param1, param2: param2) return param1*param2 } class func name(){ print("Math") } } Math.name()