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

Swift中的類(lèi)class與結(jié)構(gòu)體struct體學(xué)習(xí)筆記

 更新時(shí)間:2016年07月01日 18:32:13   作者:琿少  
和C++一樣,Swfit中同時(shí)擁有類(lèi)與結(jié)構(gòu)體,能夠充分滿足開(kāi)發(fā)者面向?qū)ο蠛兔嫦蜻^(guò)程編程的需求,這里我們就來(lái)看一下Swift中的類(lèi)class與結(jié)構(gòu)體struct體學(xué)習(xí)筆記

一、引言
Swift中的類(lèi)與結(jié)構(gòu)體十分相似,和Objective-C不同的事,Swift中的結(jié)構(gòu)體不僅可以定義屬性,也可以像類(lèi)一樣為其定義方法。

Swift中的類(lèi)與結(jié)構(gòu)體有如下相似點(diǎn):

1.定義屬性來(lái)存儲(chǔ)值。

2.定義函數(shù)來(lái)提供功能。

3.通過(guò)定義下標(biāo)語(yǔ)法使用下標(biāo)的方式取值。

4.定義構(gòu)造方法來(lái)對(duì)其進(jìn)行初始化。

5.通過(guò)擴(kuò)展來(lái)在原始基礎(chǔ)上添加功能。

6.通過(guò)協(xié)議來(lái)定義實(shí)現(xiàn)標(biāo)準(zhǔn)。

當(dāng)然類(lèi)和結(jié)構(gòu)體也有許多不同點(diǎn),下面這些功能是類(lèi)獨(dú)有的,結(jié)構(gòu)體沒(méi)有:

1.通過(guò)繼承來(lái)創(chuàng)建類(lèi)的子類(lèi)。

2.在運(yùn)行時(shí)允許對(duì)類(lèi)的實(shí)例進(jìn)行類(lèi)型的檢查和解釋。

3.析構(gòu)方法可以釋放被類(lèi)引用的資源。

4.通過(guò)引用計(jì)數(shù)允許一個(gè)類(lèi)實(shí)例的多處引用。

當(dāng)開(kāi)發(fā)者在代碼中傳遞這些實(shí)例時(shí),結(jié)構(gòu)體總是被賦值,而類(lèi)則是被引用。這是結(jié)構(gòu)體和類(lèi)的最本質(zhì)區(qū)別。

二、類(lèi)與結(jié)構(gòu)體的定義

類(lèi)與結(jié)構(gòu)體在定義語(yǔ)法上相似,示例代碼如下:

class MyClass {
  var name = "HS"
  var age = 25
}
struct MyStruct {
  var param1:Int
  var param2:String
}
//創(chuàng)建類(lèi)的實(shí)例
var obj1 = MyClass()
//創(chuàng)建結(jié)構(gòu)體的實(shí)例 所有結(jié)構(gòu)體會(huì)默認(rèn)生成一個(gè)逐個(gè)設(shè)置屬性的構(gòu)造方法 而類(lèi)不會(huì)
var obj2 = MyStruct(param1: 1,param2: "1")
//可以通過(guò)點(diǎn)語(yǔ)法來(lái)獲取類(lèi)或者結(jié)構(gòu)體中的屬性值
print(obj1.age,obj2.param1)

通過(guò)示例間的傳遞,可以證明Swift中類(lèi)被引用于結(jié)構(gòu)體被復(fù)制這樣的特點(diǎn),示例如下:

//將類(lèi)實(shí)例傳遞給另一個(gè)變量
var obj3 = obj1
//將結(jié)構(gòu)體實(shí)例傳遞給另一個(gè)變量
var obj4 = obj2
//修改變臉的值
obj3.name = "NewHS"
obj4.param1 = 2
//將 打印 NewHS 1 //說(shuō)明類(lèi)是被引用的 結(jié)構(gòu)體則被賦值
print(obj1.name,obj2.param1)

注意:在實(shí)例傳遞時(shí)同樣采用復(fù)制原理的還有枚舉類(lèi)型。

由于類(lèi)是通過(guò)引用來(lái)進(jìn)行傳遞,Swift中還提供了一種運(yùn)算符用來(lái)比較兩個(gè)實(shí)例變量或常量是否指向同一個(gè)引用,示例如下:

if obj1===obj3{
  print("same refer")
}else if obj1 !== obj3 {
  print("not same refer")
}

實(shí)際上,===與!==運(yùn)算符比較的是指針內(nèi)容。

三、類(lèi)和結(jié)構(gòu)體的選擇

由于類(lèi)和結(jié)構(gòu)體有著不同的傳遞機(jī)制,因此其也適用于不同的開(kāi)發(fā)任務(wù),下面這些情況下,官方推薦開(kāi)發(fā)者使用結(jié)構(gòu)體來(lái)創(chuàng)建數(shù)據(jù)類(lèi)型:

1.該數(shù)據(jù)類(lèi)型封裝少量的簡(jiǎn)單數(shù)據(jù)值。

2.該類(lèi)型數(shù)據(jù)來(lái)傳遞時(shí),應(yīng)該被復(fù)制。

3.該類(lèi)型中定義的數(shù)據(jù)類(lèi)型在傳遞時(shí)也應(yīng)該被賦值。

4.不需要通過(guò)集成另一個(gè)數(shù)據(jù)類(lèi)型而來(lái)。

除了上面列舉的一些情況,其它情況下,都推薦開(kāi)發(fā)者使用類(lèi)來(lái)描述數(shù)據(jù),這也是開(kāi)發(fā)中最后常用的手段。

相關(guān)文章

  • Swift教程之繼承詳解

    Swift教程之繼承詳解

    這篇文章主要介紹了Swift教程之繼承詳解,一個(gè)類(lèi)可以從另外一個(gè)類(lèi)中繼承方法,屬性或者其它的一些特性,當(dāng)一個(gè)類(lèi)繼承于另外一個(gè)類(lèi)時(shí),這個(gè)繼承的類(lèi)叫子類(lèi),被繼承的類(lèi)叫父類(lèi),需要的朋友可以參考下
    2015-01-01
  • 如何快速用上Swift靜態(tài)庫(kù)詳解

    如何快速用上Swift靜態(tài)庫(kù)詳解

    這篇文章主要給大家介紹了關(guān)于如何快速用上Swift靜態(tài)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Swift實(shí)現(xiàn)表格視圖單元格單選(2)

    Swift實(shí)現(xiàn)表格視圖單元格單選(2)

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)表格視圖單元格單選的第二篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • RxSwift學(xué)習(xí)之Observable的新建、訂閱及取消訂閱

    RxSwift學(xué)習(xí)之Observable的新建、訂閱及取消訂閱

    這篇文章主要給大家介紹了關(guān)于RxSwift學(xué)習(xí)教程之Observable的相關(guān)資料,文中詳細(xì)的給大家介紹了關(guān)于新建Observable、訂閱Observable和取消訂閱并消除內(nèi)存泄漏等相關(guān)的內(nèi)容,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09
  • 詳解Swift中的數(shù)據(jù)類(lèi)型類(lèi)型轉(zhuǎn)換

    詳解Swift中的數(shù)據(jù)類(lèi)型類(lèi)型轉(zhuǎn)換

    Swift中的類(lèi)型轉(zhuǎn)換可以結(jié)合類(lèi)的繼承等面向?qū)ο蟮木幊烫匦詠?lái)進(jìn)行,本文中我們就來(lái)詳解Swift中的數(shù)據(jù)類(lèi)型類(lèi)型轉(zhuǎn)換,需要的朋友可以參考下
    2016-07-07
  • Swift運(yùn)算符使用方法淺析

    Swift運(yùn)算符使用方法淺析

    Swift 語(yǔ)言支持大部分標(biāo)準(zhǔn) C 語(yǔ)言的運(yùn)算符,并且改進(jìn)了許多特性來(lái)使我們的代碼更加規(guī)范,其中主要包含算數(shù)運(yùn)算符、區(qū)間運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、賦值運(yùn)算符、自增自減運(yùn)算符、溢出運(yùn)算符等
    2022-09-09
  • 分析Swift性能高效的原因

    分析Swift性能高效的原因

    絕大多數(shù)公司選擇Swift語(yǔ)言開(kāi)發(fā)iOS應(yīng)用,主要原因是因?yàn)镾wift相比Objc有更快的運(yùn)行效率,更加安全的類(lèi)型檢測(cè),更多現(xiàn)代語(yǔ)言的特性提升開(kāi)發(fā)效率;這一系列的優(yōu)點(diǎn)使Swift語(yǔ)言的熱度越來(lái)越高。
    2020-10-10
  • Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記

    Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記

    這篇文章主要介紹了Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記,Optional鏈?zhǔn)荢wift入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-07-07
  • Swift編程中用以管理內(nèi)存的自動(dòng)引用計(jì)數(shù)詳解

    Swift編程中用以管理內(nèi)存的自動(dòng)引用計(jì)數(shù)詳解

    這篇文章主要介紹了Swift編程中用以管理內(nèi)存的自動(dòng)引用計(jì)數(shù)詳解,是Swift入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Swift實(shí)現(xiàn)快速排序算法的代碼示例

    Swift實(shí)現(xiàn)快速排序算法的代碼示例

    這篇文章主要介紹了Swift實(shí)現(xiàn)快速排序算法的代碼示例,首先利用分治法講解了快速排序的思路,需要的朋友可以參考下
    2016-07-07

最新評(píng)論

珠海市| 通许县| 六盘水市| 水城县| 石嘴山市| 林甸县| 宁远县| 五指山市| 桃园县| 临猗县| 南和县| 河东区| 灵石县| 固安县| 秦安县| 来安县| 郓城县| 辽阳县| 滦平县| 蓬安县| 清丰县| 龙江县| 游戏| 乌审旗| 姚安县| 武冈市| 青河县| 衡阳市| 利辛县| 深泽县| 江门市| 深州市| 兰考县| 兴海县| 洞头县| 星座| 陆丰市| 左云县| 当阳市| 泊头市| 寻乌县|