最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift學(xué)習(xí)筆記之構(gòu)造器重載

 更新時(shí)間:2014年11月18日 15:01:04   投稿:hebedich  
Swift 將為所有屬性已提供默認(rèn)值的且自身沒有定義任何構(gòu)造器的結(jié)構(gòu)體或基類,提供一個(gè)默認(rèn)的構(gòu)造器。這個(gè)默認(rèn)構(gòu)造器將簡單的創(chuàng)建一個(gè)所有屬性值都設(shè)置為默認(rèn)值的實(shí)例。

與函數(shù)一樣,方法也存在重載,其重載的方式與函數(shù)一致。那么作為構(gòu)造器的特殊方法,是否也存在重載呢?答案是肯定的。

一、構(gòu)造器重載概念

Swift中函數(shù)重載的條件也適用于構(gòu)造器,條件如下:
函數(shù)有相同的名字;
參數(shù)列表不同或返回值類型不同,或外部參數(shù)名不同;
Swift中的構(gòu)造器可以滿足以下兩個(gè)條件,代碼如下:

復(fù)制代碼 代碼如下:

class Rectangle {
    var width : Double
    var height : Double
    init(width : Double, height : Double) {        ①
        self.width   = width
        self.height  = height
    }
    init(W width : Double,H height : Double) {        ②
        self.width   = width
        self.height  = height
    }
    init(length : Double) {        ③
        self.width   = length
        self.height  = length
    }
    init() {                                                ④
        self.width   = 640.0
        self.height  = 940.0
    }
}
var rectc1 = Rectangle(width : 320.0, height : 480.0)        ⑤
println("長方形:\(rectc1.width) x \(rectc1.height)")
var rectc2 = Rectangle(W : 320.0, H : 480.0)        ⑥
println("長方形:\(rectc2.width) x \(rectc2.height)")
var rectc3 = Rectangle(length: 500.0)        ⑦
println("長方形3:\(rectc3.width) x \(rectc3.height)")
var rectc4 = Rectangle()        ⑧
println("長方形4:\(rectc4.width) x \(rectc4.height)")

上述代碼第①~④行定義了4個(gè)構(gòu)造器,其他是重載關(guān)系。從參數(shù)個(gè)數(shù)和參數(shù)類型上看,第①行和第②行的構(gòu)造器是一樣的,但是它們的外部參數(shù)名不同,所以在第⑤行調(diào)用的是第①行的構(gòu)造器,第⑥行調(diào)用的是第②行的構(gòu)造器。
第③行和第④行的構(gòu)造器參數(shù)個(gè)數(shù)與第①行不同,所以在第⑦行調(diào)用的是第③行的構(gòu)造器,第④行調(diào)用的是第⑧行的構(gòu)造器。

二、值類型構(gòu)造器代理

為了減少多個(gè)構(gòu)造器間的代碼重復(fù),在定義構(gòu)造器時(shí),可以通過調(diào)用其他構(gòu)造器來完成實(shí)例的部分構(gòu)造過程,這個(gè)過程稱為構(gòu)造器代理。構(gòu)造器代理在值類型和引用類型中使用方式不同,本節(jié)我們先介紹值類型構(gòu)造器代理。
將上一節(jié)的示例修改如下:

復(fù)制代碼 代碼如下:

struct Rectangle {
    var width : Double
    var height : Double
    init(width : Double, height : Double) {        ①
        self.width   = width
        self.height  = height
    }
    init(W width : Double,H height : Double) {        ②
        self.width   = width
        self.height  = height
    }
    init(length : Double) {        ③
        self.init(W : length, H : length)
    }
    init() {                                                ④
        self.init(width: 640.0, height: 940.0)
    }
}
var rectc1 = Rectangle(width : 320.0, height : 480.0)        ⑤
println("長方形:\(rectc1.width) x \(rectc1.height)")
var rectc2 = Rectangle(W : 320.0, H : 480.0)        ⑥
println("長方形:\(rectc2.width) x \(rectc2.height)")
var rectc3 = Rectangle(length: 500.0)        ⑦
println("長方形3:\(rectc3.width) x \(rectc3.height)")
var rectc4 = Rectangle()        ⑧
println("長方形4:\(rectc4.width) x \(rectc4.height)")

將Rectangle聲明為結(jié)構(gòu)體類型,其中也有4個(gè)構(gòu)造器重載。在第③行和第④行的構(gòu)造器中使用了self.init語句,self指示當(dāng)前實(shí)例本身,init是本身的構(gòu)造器,第③行的self.init(W : length, H : length)語句是在調(diào)用第②行定義的構(gòu)造器,第④行的self.init(width: 640.0, height: 940.0)語句是在調(diào)用第①行定義的構(gòu)造器。
這種在同一個(gè)類型中通過self.init語句進(jìn)行調(diào)用就是我們說的構(gòu)造器代理。

三、引用類型構(gòu)造器橫向代理

引用類型構(gòu)造器代理就是類構(gòu)造器代理。由于類有繼承關(guān)系,類構(gòu)造器代理比較復(fù)雜,分為橫向代理和向上代理。
        橫向代理類似于值類型構(gòu)造器代理,發(fā)生在同一類內(nèi)部,這種構(gòu)造器稱為便利構(gòu)造器(convenience initializers)。
        向上代理發(fā)生在繼承情況下,在子類構(gòu)造過程中要先調(diào)用父類構(gòu)造器,初始化父類的存儲(chǔ)屬性,這種構(gòu)造器稱為指定構(gòu)造器(designated initializers)。
由于我們還沒有介紹繼承,因此本章只介紹橫向代理。
將上一節(jié)的示例修改如下:

復(fù)制代碼 代碼如下:

class Rectangle {
    var width : Double
    var height : Double
    init(width : Double, height : Double) {        ①
        self.width   = width
        self.height  = height
    }
    init(W width : Double,H height : Double) {        ②
        self.width   = width
        self.height  = height
    }
    convenience init(length : Double) {        ③
        self.init(W : length, H : length)
    }
    convenience init() {        ④
        self.init(width: 640.0, height: 940.0)
    }
}
var rectc1 = Rectangle(width : 320.0, height : 480.0)        ⑤
println("長方形:\(rectc1.width) x \(rectc1.height)")
var rectc2 = Rectangle(W : 320.0, H : 480.0)        ⑥
println("長方形:\(rectc2.width) x \(rectc2.height)")
var rectc3 = Rectangle(length: 500.0)        ⑦
println("長方形3:\(rectc3.width) x \(rectc3.height)")
var rectc4 = Rectangle()        ⑧
println("長方形4:\(rectc4.width) x \(rectc4.height)")

將Rectangle聲明為類,其中也有4個(gè)構(gòu)造器重載。在第③行和第④行的構(gòu)造器中使用了self.init語句,并且在構(gòu)造器前面加上了convenience關(guān)鍵字,convenience表示便利構(gòu)造器,這說明我們定義構(gòu)造器是橫向代理調(diào)用其他構(gòu)造器。
第③行的self.init(W : length, H : length)語句是在橫向調(diào)用第②行定義的構(gòu)造器代理,第④行的self.init(width: 640.0, height: 940.0)語句是在橫向調(diào)用第①行定義的構(gòu)造器代理。

構(gòu)造器重載的問題今天就到這里吧,小伙伴們可以參考下示例,希望對(duì)大家有所幫助

相關(guān)文章

  • 解析Swift中的泛型支持與使用

    解析Swift中的泛型支持與使用

    支持泛型意味著可以在規(guī)定參數(shù)類型的情況下更靈活地編寫程序,也是Swift語言先進(jìn)而又強(qiáng)大的體現(xiàn),這里我們就來解析Swift中的泛型支持與使用:
    2016-07-07
  • Swift中用到extension的一些基本的擴(kuò)展功能講解

    Swift中用到extension的一些基本的擴(kuò)展功能講解

    這篇文章主要介紹了Swift的一些基本的擴(kuò)展功能,即extension關(guān)鍵字的使用,需要的朋友可以參考下
    2015-11-11
  • Swift學(xué)習(xí)教程之SQLite的基礎(chǔ)使用

    Swift學(xué)習(xí)教程之SQLite的基礎(chǔ)使用

    這篇文章主要給大家介紹了關(guān)于Swift學(xué)習(xí)教程之SQLite的基礎(chǔ)使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Swift SQLite具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • SwiftUI中TabView組件的常規(guī)使用

    SwiftUI中TabView組件的常規(guī)使用

    這篇文章主要給大家介紹了關(guān)于SwiftUI中TabView組件的常規(guī)使用,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SwiftUI具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Swift方法調(diào)度之類的普通方法底層探究

    Swift方法調(diào)度之類的普通方法底層探究

    這篇文章主要介紹了Swift-方法調(diào)度-類的普通方法底層探究,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • Swift心得筆記之控制流

    Swift心得筆記之控制流

    控制流(Control Flow)我不想這么譯的。。。我更想叫控制語句,但是想想,這么叫也沒錯(cuò),意指流程控制。大部分用法跟C類似。
    2015-04-04
  • swift自定義表格控件(UITableView)

    swift自定義表格控件(UITableView)

    這篇文章主要為大家詳細(xì)介紹了swift自定義表格控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • SwiftUI學(xué)習(xí)之state和Binding的區(qū)別淺析

    SwiftUI學(xué)習(xí)之state和Binding的區(qū)別淺析

    這篇文章主要給大家介紹了關(guān)于SwiftUI學(xué)習(xí)之state和Binding區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • mac git xcrun error active developer path 錯(cuò)誤

    mac git xcrun error active developer path 錯(cuò)誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環(huán)境時(shí),出現(xiàn)了錯(cuò)誤(mac git xcrun error active developer path)的解決辦法,希望對(duì)大家有所幫助
    2014-09-09
  • Swift網(wǎng)絡(luò)請(qǐng)求庫Alamofire使用詳解

    Swift網(wǎng)絡(luò)請(qǐng)求庫Alamofire使用詳解

    這篇文章主要為大家詳細(xì)介紹了Swift網(wǎng)絡(luò)請(qǐng)求庫Alamofire的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論

大连市| 神池县| 屏东市| 漳州市| 唐山市| 林州市| 海南省| 土默特右旗| 孟州市| 洛隆县| 高邮市| 保山市| 繁昌县| 溆浦县| 沁源县| 惠来县| 新昌县| 通辽市| 永登县| 五莲县| 平南县| 凤山市| 迭部县| 西昌市| 彝良县| 德州市| 南皮县| 阜康市| 明星| 蕲春县| 徐闻县| 东平县| 墨玉县| 启东市| 祁东县| 志丹县| 竹北市| 永康市| 广宗县| 怀安县| 松原市|