欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年07月01日 18:46:39   作者:琿少  
既然面向?qū)ο竽蔷鸵欢〞?huì)有method,方法和面向過程語言中的function函數(shù)并沒什么區(qū)別,只不過方法在面向?qū)ο笳Z言中可以被類來約束作用域,這里我們就來詳解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()

一、引言

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

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

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

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í)例本身,開發(fā)者可以在實(shí)例方法中使用self來調(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并不要求開發(fā)者必須寫self,默認(rèn)情況下,開發(fā)者可以直接省略self來調(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來調(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中提供了另一種方式,如果真有如此的需求,開發(fā)者可以使用mutating關(guān)鍵字將實(shí)例方法聲明成可變的,實(shí)際上,如果在可變的實(shí)例方法中修改了值類型屬性的值,是會(huì)創(chuàng)建一個(gè)新的實(shí)例來代替原來的實(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í)例,上面的寫法和下面的寫法原理是一樣的:

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

如果是在類中創(chuàng)建類型方法,若此方法可以被子類進(jìn)行重寫,則應(yīng)該使用class關(guān)鍵字來創(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)文章

  • Swift Access Control訪問控制與斷言詳細(xì)介紹

    Swift Access Control訪問控制與斷言詳細(xì)介紹

    這篇文章主要介紹了Swift Access Control訪問控制與斷言,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • Swift中非可選的可選值類型處理方法詳解

    Swift中非可選的可選值類型處理方法詳解

    Optional是Objective-C沒有的數(shù)據(jù)類型,是蘋果引入到Swift語言中的全新類型,它的特點(diǎn)就和它的名字一樣:可以有值,也可以沒有值,當(dāng)它沒有值時(shí),就是nil。下面這篇文章主要給大家介紹了關(guān)于Swift中非可選的可選值類型處理方法的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • 詳解Swift面向?qū)ο缶幊讨械姆椒?method)

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

    既然面向?qū)ο竽蔷鸵欢〞?huì)有method,方法和面向過程語言中的function函數(shù)并沒什么區(qū)別,只不過方法在面向?qū)ο笳Z言中可以被類來約束作用域,這里我們就來詳解Swift面向?qū)ο缶幊讨械姆椒?method)
    2016-07-07
  • Swift中初始化init的方法小結(jié)

    Swift中初始化init的方法小結(jié)

    Swift有著超級(jí)嚴(yán)格的初始化方法,不僅強(qiáng)化了designated初始化方法的地位,所有不加修飾的init方法都需要在方法中確保非Optional的實(shí)例變量被賦值初始化,下面這篇文章主要給大家介紹了關(guān)于Swift中初始化init的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04
  • swift 錯(cuò)誤處理do catch try try!使用詳解

    swift 錯(cuò)誤處理do catch try try!使用詳解

    這篇文章主要介紹了swift 錯(cuò)誤處理do catch try try!使用詳解的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Swift數(shù)組詳細(xì)用法解析

    Swift數(shù)組詳細(xì)用法解析

    這篇文章主要為大家詳細(xì)介紹了Swift數(shù)組詳細(xì)用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Swift代碼自定義UIView實(shí)現(xiàn)示例

    Swift代碼自定義UIView實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Swift如何自定義UIView的實(shí)現(xiàn)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步,早日升職加薪
    2021-10-10
  • Swift使用enum抹平數(shù)組元素差異實(shí)例詳解

    Swift使用enum抹平數(shù)組元素差異實(shí)例詳解

    這篇文章主要為大家介紹了Swift使用enum抹平數(shù)組元素差異實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Swift實(shí)現(xiàn)監(jiān)聽鍵盤通知及一些處理詳解

    Swift實(shí)現(xiàn)監(jiān)聽鍵盤通知及一些處理詳解

    這篇文章主要給大家介紹了關(guān)于Swift實(shí)現(xiàn)監(jiān)聽鍵盤通知及一些處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • switch實(shí)現(xiàn)一個(gè)兩數(shù)的運(yùn)算代碼示例

    switch實(shí)現(xiàn)一個(gè)兩數(shù)的運(yùn)算代碼示例

    這篇文章主要介紹了switch實(shí)現(xiàn)一個(gè)兩數(shù)的運(yùn)算代碼示例,需要的朋友可以參考下
    2017-06-06

最新評(píng)論