激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Swift - Swift學(xué)習(xí)筆記之構(gòu)造器重載

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

2020-12-17 15:44Swift教程網(wǎng) Swift

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ì)大家有所幫助

延伸 · 閱讀

精彩推薦
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網(wǎng)上上看到的答案,復(fù)制粘貼過來和大家分享一下,因?yàn)槲液秃芏嗳艘粯雍荜P(guān)心Swift的出現(xiàn)對(duì)Mac開發(fā)的影響和對(duì)Objective-C的影響。...

    Swift教程網(wǎng)4412020-12-16
  • Swiftmac 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ì)大家有所幫助...

    Swift教程網(wǎng)2232020-12-16
  • SwiftSwift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果

    Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    Stevin的技術(shù)博客12372021-01-13
  • SwiftSwift的74個(gè)常用內(nèi)置函數(shù)介紹

    Swift的74個(gè)常用內(nèi)置函數(shù)介紹

    這篇文章主要介紹了Swift的74個(gè)常用內(nèi)置函數(shù)介紹,這篇文章列舉出了所有的Swift庫函數(shù),內(nèi)置函數(shù)是指無需引入任何模塊即可以直接使用的函數(shù),需要的朋友可...

    Swift教程網(wǎng)5802020-12-19
  • SwiftSwift中轉(zhuǎn)義閉包示例詳解

    Swift中轉(zhuǎn)義閉包示例詳解

    在Swift 中的閉包類似于結(jié)構(gòu)塊,并可以在任何地方調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Swift中轉(zhuǎn)義閉包的相關(guān)資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
  • Swiftswift where與匹配模式的實(shí)例詳解

    swift where與匹配模式的實(shí)例詳解

    這篇文章主要介紹了swift where與匹配模式的實(shí)例詳解的相關(guān)資料,這里附有簡單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢(mèng)的魔術(shù)師14382021-01-06
  • SwiftSwift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • SwiftSwift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解,本文詳細(xì)講解了Swift中的基本數(shù)據(jù)類型和基本語法,例如常量和變量、注釋、分號(hào)、整數(shù)、數(shù)值類型轉(zhuǎn)換等...

    Swift教程網(wǎng)5162020-12-18
主站蜘蛛池模板: 毛片大全免费看 | 久久精品亚洲精品国产欧美kt∨ | 蜜桃传媒视频麻豆第一区免费观看 | 成人在线视频播放 | 石原莉奈日韩一区二区三区 | 毛片成人 | 免费色片 | 精品久久久一二三区播放播放播放视频 | 精品99在线视频 | 免费国产人成网站 | 男人的天堂视频网站 | 日本中文字幕网址 | 国产精品视频在 | 中国产一级毛片 | 媚药按摩痉挛w中文字幕 | 91在线视频在线观看 | 精品一区二区三区免费看 | 毛片在线看免费 | 99精彩视频在线观看 | 最新在线黄色网址 | 国产精品视频一区二区三区四区五区 | 午夜免费一区 | 中文字幕在线观看免费视频 | av免费在线观看免费 | 韩国三级日本三级香港三级黄 | 亚洲国产成人一区 | 一区在线不卡 | 午夜精品在线播放 | 日日狠狠久久偷偷四色综合免费 | 久久精品日本一区 | 午夜精品在线视频 | 一级做a在线观看 | 一级视频网站 | 精品国产乱码一区二区三区四区 | 视频一区二区三区在线 | 91精品久久久久久久久 | 在线看一区二区三区 | 国产一级不卡毛片 | 免费看黄色三级毛片 | 草草视频在线播放 | 成人免费久久网 |