詳解Swift面向?qū)ο缶幊讨械姆椒?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()
一、引言
方法只是一個術語,其實就是將函數(shù)與特定的類型結(jié)合,類、結(jié)構(gòu)體、枚舉都可以定義方法,方法又分為實例方法和類型方法,類型方法類似于Objective-C中的類方法。Swift和Objective-C的一大不同是,Objective-C只有在類中可以定義方法。
二、實例方法基礎
實例方法的語法和函數(shù)完全一致,其和具體類型的實例所關聯(lián),實例方法在調(diào)用時由類型的實例點語法進行調(diào)用來完成一些功能模塊。示例如下:
class Math { //完成加法功能的實例方法 func add(param1:Double,param2:Double)->Double{ return param1+param2 } } //創(chuàng)建類型實例 var obj = Math() //調(diào)用方法進行計算 obj.add(5, param2: 5)
與Objective-C類似,Swift中每一個類的實例中都隱藏含有一個self屬性,self屬性就是實例本身,開發(fā)者可以在實例方法中使用self來調(diào)用屬性或者其他實例方法,示例如下:
class Math { //完成加法功能的實例方法 func add(param1:Double,param2:Double)->Double{ return param1+param2 } func mul(param1:Double,param2:Double) -> Double { //使用self調(diào)用實例方法 self.add(param1, param2: param2) return param1*param2 } }
然而,Swift并不要求開發(fā)者必須寫self,默認情況下,開發(fā)者可以直接省略self來調(diào)用屬性和方法:
class Math { //完成加法功能的實例方法 func add(param1:Double,param2:Double)->Double{ return param1+param2 } func mul(param1:Double,param2:Double) -> Double { //使用self調(diào)用實例方法 add(param1, param2: param2) return param1*param2 } }
有一種情況需要注意,對于屬性的調(diào)用,如果方法中的參數(shù)名和類實例的屬性名相同,則必須使用self來調(diào)用類的實例屬性,防止歧義的產(chǎn)生:
class Math { var param1 = 10.0 //完成加法功能的實例方法 func add(param1:Double,param2:Double)->Double{ //這里將使用param1=10,如果不加self 將使用參數(shù)中的param1 return self.param1+param2 } func mul(param1:Double,param2:Double) -> Double { //使用self調(diào)用實例方法 add(param1, param2: param2) return param1*param2 } }
三、在實例方法中修改值類型的值
首先需要清楚一個概念,Swift中有兩種類型,值類型和引用類型,具體在類、結(jié)構(gòu)體、枚舉一節(jié)中有相關介紹,這里需要注意的是,對于值類型,即結(jié)構(gòu)體和枚舉,其并不能直接在實例方法中修改實例屬性的值,Swift中提供了另一種方式,如果真有如此的需求,開發(fā)者可以使用mutating關鍵字將實例方法聲明成可變的,實際上,如果在可變的實例方法中修改了值類型屬性的值,是會創(chuàng)建一個新的實例來代替原來的實例的,示例如下:
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)
在值類型實例的可變方法中修改屬性的值,實際上就是創(chuàng)建了一個新的實例,上面的寫法和下面的寫法原理是一樣的:
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) } }
四、類型方法
正如實例方法是通過類型的實例來進行調(diào)用的,類型方法是通過類型直接來調(diào)用的,相比于實例方法,類型方法中的self指當前類型,同樣開發(fā)者可以使用self來區(qū)別類型屬性和類型方法中的參數(shù)。使用Static關鍵字來進行類型方法的創(chuàng)建:
如果是在類中創(chuàng)建類型方法,若此方法可以被子類進行重寫,則應該使用class關鍵字來創(chuàng)建,示例如下:
class Math { var param1 = 10.0 //完成加法功能的實例方法 func add(param1:Double,param2:Double)->Double{ //這里將使用param1=10,如果不加self 將使用參數(shù)中的param1 return self.param1+param2 } func mul(param1:Double,param2:Double) -> Double { //使用self調(diào)用實例方法 add(param1, param2: param2) return param1*param2 } class func name(){ print("Math") } } Math.name()
相關文章
Swift Access Control訪問控制與斷言詳細介紹
這篇文章主要介紹了Swift Access Control訪問控制與斷言,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-09-09swift 錯誤處理do catch try try!使用詳解
這篇文章主要介紹了swift 錯誤處理do catch try try!使用詳解的相關資料,需要的朋友可以參考下2023-03-03Swift實現(xiàn)監(jiān)聽鍵盤通知及一些處理詳解
這篇文章主要給大家介紹了關于Swift實現(xiàn)監(jiān)聽鍵盤通知及一些處理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-01-01switch實現(xiàn)一個兩數(shù)的運算代碼示例
這篇文章主要介紹了switch實現(xiàn)一個兩數(shù)的運算代碼示例,需要的朋友可以參考下2017-06-06