麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Swift > 正文

詳解Swift面向對象編程中的方法(method)

2020-03-09 17:48:17
字體:
來源:轉載
供稿:網友
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()

 


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩精品免费看 | 久久生活片 | 日韩欧美视频一区二区三区 | 国产视频导航 | 成人 日韩 | 九九热免费在线观看 | 国产毛片在线看 | 日本成人在线免费 | 91中文在线| 久久国产28 | 色妇视频 | 成人一级免费视频 | 一级毛片在线看 | 欧美男女爱爱视频 | 久久久久久久国产视频 | 日韩午夜一区二区三区 | 欧美黄色免费视频 | 久久伊人国产精品 | 国产亚洲精品成人 | 成年人网站国产 | 综合精品 | 一区二区三区视频在线 | 国内免费视频成人精品 | 国产一级淫片a级aaa | 成人在线视频免费播放 | 99国产精品白浆在线观看免费 | 欧美另类在线视频 | 久久丝袜脚交足黄网站免费 | 女教师~淫辱の动漫在线 | 日日操夜夜操视频 | 国产黄色网 | 欧美一级全黄 | 操碰网| 日本精品中文字幕 | 国产女同疯狂激烈互摸 | 免费国产在线视频 | 中国女警察一级毛片视频 | 九一免费版在线观看 | 久久情爱网 | 成人在线视频黄色 | 三级xxxx |