国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Swift > 正文

詳解Swift面向?qū)ο缶幊讨械姆椒?method)

2020-03-09 17:48:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎ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)  }  static func name(){    print("Point")  }}Point.name()

一、引言

方法只是一個(gè)術(shù)語(yǔ),其實(shí)就是將函數(shù)與特定的類型結(jié)合,類、結(jié)構(gòu)體、枚舉都可以定義方法,方法又分為實(shí)例方法和類型方法,類型方法類似于Objective-C中的類方法。Swift和Objective-C的一大不同是,Objective-C只有在類中可以定義方法。

二、實(shí)例方法基礎(chǔ)

實(shí)例方法的語(yǔ)法和函數(shù)完全一致,其和具體類型的實(shí)例所關(guān)聯(lián),實(shí)例方法在調(diào)用時(shí)由類型的實(shí)例點(diǎn)語(yǔ)法進(jìn)行調(diào)用來(lái)完成一些功能模塊。示例如下:

class Math {  //完成加法功能的實(shí)例方法  func add(param1:Double,param2:Double)->Double{    return param1+param2  }}//創(chuàng)建類型實(shí)例var obj = Math()//調(diào)用方法進(jìn)行計(jì)算obj.add(5, param2: 5)

與Objective-C類似,Swift中每一個(gè)類的實(shí)例中都隱藏含有一個(gè)self屬性,self屬性就是實(shí)例本身,開(kāi)發(fā)者可以在實(shí)例方法中使用self來(lái)調(diào)用屬性或者其他實(shí)例方法,示例如下:

class Math {  //完成加法功能的實(shí)例方法  func add(param1:Double,param2:Double)->Double{    return param1+param2  }  func mul(param1:Double,param2:Double) -> Double {    //使用self調(diào)用實(shí)例方法    self.add(param1, param2: param2)    return param1*param2  }}

然而,Swift并不要求開(kāi)發(fā)者必須寫(xiě)self,默認(rèn)情況下,開(kāi)發(fā)者可以直接省略self來(lái)調(diào)用屬性和方法:

class Math {  //完成加法功能的實(shí)例方法  func add(param1:Double,param2:Double)->Double{    return param1+param2  }  func mul(param1:Double,param2:Double) -> Double {    //使用self調(diào)用實(shí)例方法    add(param1, param2: param2)    return param1*param2  }}

有一種情況需要注意,對(duì)于屬性的調(diào)用,如果方法中的參數(shù)名和類實(shí)例的屬性名相同,則必須使用self來(lái)調(diào)用類的實(shí)例屬性,防止歧義的產(chǎn)生:

class Math {  var param1 = 10.0  //完成加法功能的實(shí)例方法  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)用實(shí)例方法    add(param1, param2: param2)    return param1*param2  }}

三、在實(shí)例方法中修改值類型的值

首先需要清楚一個(gè)概念,Swift中有兩種類型,值類型和引用類型,具體在類、結(jié)構(gòu)體、枚舉一節(jié)中有相關(guān)介紹,這里需要注意的是,對(duì)于值類型,即結(jié)構(gòu)體和枚舉,其并不能直接在實(shí)例方法中修改實(shí)例屬性的值,Swift中提供了另一種方式,如果真有如此的需求,開(kāi)發(fā)者可以使用mutating關(guān)鍵字將實(shí)例方法聲明成可變的,實(shí)際上,如果在可變的實(shí)例方法中修改了值類型屬性的值,是會(huì)創(chuàng)建一個(gè)新的實(shí)例來(lái)代替原來(lái)的實(shí)例的,示例如下:

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)

在值類型實(shí)例的可變方法中修改屬性的值,實(shí)際上就是創(chuàng)建了一個(gè)新的實(shí)例,上面的寫(xiě)法和下面的寫(xiě)法原理是一樣的:

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)  }}

四、類型方法

正如實(shí)例方法是通過(guò)類型的實(shí)例來(lái)進(jìn)行調(diào)用的,類型方法是通過(guò)類型直接來(lái)調(diào)用的,相比于實(shí)例方法,類型方法中的self指當(dāng)前類型,同樣開(kāi)發(fā)者可以使用self來(lái)區(qū)別類型屬性和類型方法中的參數(shù)。使用Static關(guān)鍵字來(lái)進(jìn)行類型方法的創(chuàng)建:

如果是在類中創(chuàng)建類型方法,若此方法可以被子類進(jìn)行重寫(xiě),則應(yīng)該使用class關(guān)鍵字來(lái)創(chuàng)建,示例如下:

class Math {  var param1 = 10.0  //完成加法功能的實(shí)例方法  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)用實(shí)例方法    add(param1, param2: param2)    return param1*param2  }  class func name(){    print("Math")  }}Math.name()

 


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到swift教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 霸州市| 双流县| 遵化市| 苗栗市| 庆城县| 商水县| 屏东县| 交口县| 文山县| 同心县| 嘉定区| 汤阴县| 大竹县| 息烽县| 孟村| 临安市| 华容县| 监利县| 胶南市| 灌云县| 和平区| 八宿县| 文山县| 托克逊县| 宜良县| 喀喇沁旗| 梁平县| 桦川县| 鄱阳县| 翁源县| 武城县| 施秉县| 菏泽市| 盱眙县| 五常市| 灵武市| 青州市| 桓仁| 吉木萨尔县| 伊金霍洛旗| 舒兰市|