亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2016年07月01日 18:46:39   作者:琿少  
既然面向?qū)ο竽蔷鸵欢〞?huì)有method,方法和面向過(guò)程語(yǔ)言中的function函數(shù)并沒(méi)什么區(qū)別,只不過(guò)方法在面向?qū)ο笳Z(yǔ)言中可以被類(lèi)來(lái)約束作用域,這里我們就來(lái)詳解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ù)語(yǔ),其實(shí)就是將函數(shù)與特定的類(lèi)型結(jié)合,類(lèi)、結(jié)構(gòu)體、枚舉都可以定義方法,方法又分為實(shí)例方法和類(lèi)型方法,類(lèi)型方法類(lèi)似于Objective-C中的類(lèi)方法。Swift和Objective-C的一大不同是,Objective-C只有在類(lèi)中可以定義方法。

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

實(shí)例方法的語(yǔ)法和函數(shù)完全一致,其和具體類(lèi)型的實(shí)例所關(guān)聯(lián),實(shí)例方法在調(diào)用時(shí)由類(lèi)型的實(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)建類(lèi)型實(shí)例
var obj = Math()
//調(diào)用方法進(jìn)行計(jì)算
obj.add(5, param2: 5)

與Objective-C類(lèi)似,Swift中每一個(gè)類(lèi)的實(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ù)名和類(lèi)實(shí)例的屬性名相同,則必須使用self來(lái)調(diào)用類(lèi)的實(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í)例方法中修改值類(lèi)型的值

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

在值類(lèi)型實(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)
  }
}

四、類(lèi)型方法

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

如果是在類(lèi)中創(chuàng)建類(lèi)型方法,若此方法可以被子類(lèi)進(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)文章

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

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

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

    Swift中非可選的可選值類(lèi)型處理方法詳解

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

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

    既然面向?qū)ο竽蔷鸵欢〞?huì)有method,方法和面向過(guò)程語(yǔ)言中的function函數(shù)并沒(méi)什么區(qū)別,只不過(guò)方法在面向?qū)ο笳Z(yǔ)言中可以被類(lèi)來(lái)約束作用域,這里我們就來(lái)詳解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)聽(tīng)鍵盤(pán)通知及一些處理詳解

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

    這篇文章主要給大家介紹了關(guān)于Swift實(shí)現(xiàn)監(jiān)聽(tīng)鍵盤(pán)通知及一些處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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)論