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

Swift里的值類(lèi)型與引用類(lèi)型區(qū)別和使用

 更新時(shí)間:2015年05月25日 10:30:29   投稿:junjie  
這篇文章主要介紹了Swift里的值類(lèi)型與引用類(lèi)型區(qū)別和使用,本文講解了值類(lèi)型與引用類(lèi)型的區(qū)別、如何選擇類(lèi)型、什么時(shí)候該用值類(lèi)型、什么時(shí)候該用引用類(lèi)型等內(nèi)容,需要的朋友可以參考下

Swift里面的類(lèi)型分為兩種:

●值類(lèi)型(Value Types):每個(gè)實(shí)例都保留了一分獨(dú)有的數(shù)據(jù)拷貝,一般以結(jié)構(gòu)體 (struct)、枚舉(enum) 或者元組(tuple)的形式出現(xiàn)。
●引用類(lèi)型(Reference Type):每個(gè)實(shí)例共享同一份數(shù)據(jù)來(lái)源,一般以類(lèi)(class)的形式出現(xiàn)。

在這篇博文里面,我們會(huì)介紹兩種類(lèi)型各自的優(yōu)點(diǎn),以及應(yīng)該怎么選擇使用。

值類(lèi)型與引用類(lèi)型的區(qū)別

值類(lèi)型和引用類(lèi)型最基本的分別在復(fù)制之后的結(jié)果。當(dāng)一個(gè)值類(lèi)型被復(fù)制的時(shí)候,相當(dāng)于創(chuàng)造了一個(gè)完全獨(dú)立的實(shí)例,這個(gè)實(shí)例保有屬于自己的獨(dú)有數(shù)據(jù),數(shù)據(jù)不會(huì)受到其他實(shí)例的數(shù)據(jù)變化影響:

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

    // 下面是一個(gè)值類(lèi)型的例子
    struct S { var data: Int = -1 }
    var a = S()
    var b = a                           // b是a的拷貝
    a.data = 42                         // 更改a的數(shù)據(jù),b的不受影響
    println("\(a.data), \(b.data)")     // 輸出結(jié)果 "42, -1"

值類(lèi)型就好像身份證復(fù)印件一樣,復(fù)印出來(lái)之后,修改原件上面的內(nèi)容,復(fù)印件上的內(nèi)容不會(huì)變。

另一方面,復(fù)制一個(gè)引用類(lèi)型的時(shí)候,實(shí)際上是默默地創(chuàng)造了一個(gè)共享的實(shí)例分身,兩者是共用一套數(shù)據(jù)。因此修改其中任何一個(gè)實(shí)例的數(shù)據(jù),也會(huì)影響到另外那個(gè)。

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

    // 下面是一個(gè)引用類(lèi)型的例子
    class C { var data: Int = -1 }
    var x = C()
    var y = x                           // y是x的拷貝
    x.data = 42                         // 更改x的數(shù)據(jù),等于同時(shí)修改了y
    println("\(x.data), \(y.data)")     // 輸出結(jié)果 "42, 42"

Mutation(修改)在安全中扮演的角色

值類(lèi)型較引用類(lèi)型來(lái)說(shuō),會(huì)讓你更容易在大量代碼中理清狀況。如果你總是得到一個(gè)獨(dú)立的拷貝出來(lái)的實(shí)例,你就可以放心它不會(huì)被你app里面的其他部分代碼默默地修改。這在多線(xiàn)程的環(huán)境里面是尤為重要的,因?yàn)榱硗庖粋€(gè)線(xiàn)程可能會(huì)在暗地里修改你的數(shù)據(jù)。因此可能會(huì)造成嚴(yán)重的程序錯(cuò)誤,這在調(diào)試過(guò)程中非常難以排除。

由于差別主要在于修改數(shù)據(jù)的后果,那么當(dāng)實(shí)例的數(shù)據(jù)只讀,不存在需要更改的情況下,用哪種類(lèi)型都是沒(méi)有分別的。

你可能在想,有的時(shí)候我可能也需要一個(gè)完全不變的類(lèi)。這樣使用Cocoa NSObject對(duì)象的時(shí)候會(huì)比較容易,又可以保留值語(yǔ)義的好處。在今天,你可以通過(guò)只使用不可變的存儲(chǔ)屬性,和避開(kāi)任何可以修改狀態(tài)的API,用Swift寫(xiě)出一個(gè)不可變類(lèi)(immutable class)。實(shí)際上,很多基本的Cocoa類(lèi),例如NSURL,都是設(shè)計(jì)成不可變類(lèi)的。然而,Swift語(yǔ)言目前只強(qiáng)制struct和enum這種值類(lèi)型的不可變性,對(duì)類(lèi)這種引用類(lèi)型則沒(méi)有。(例如還不支持強(qiáng)制將子類(lèi)的限制為不可變類(lèi))

如何選擇類(lèi)型?

所以當(dāng)我們想要建立一個(gè)新的類(lèi)型的時(shí)候,怎么決定用值類(lèi)型還是引用類(lèi)型呢?當(dāng)你使用Cocoa框架的時(shí)候,很多API都要通過(guò)NSObject的子類(lèi)使用,所以這時(shí)候必須要用到引用類(lèi)型class。在其他情況下,有下面幾個(gè)準(zhǔn)則:

什么時(shí)候該用值類(lèi)型:

●要用==運(yùn)算符來(lái)比較實(shí)例的數(shù)據(jù)時(shí)
●你希望那個(gè)實(shí)例的拷貝能保持獨(dú)立的狀態(tài)時(shí)
●數(shù)據(jù)會(huì)被多個(gè)線(xiàn)程使用時(shí)

什么時(shí)候該用引用類(lèi)型(class):

●要用==運(yùn)算符來(lái)比較實(shí)例身份的時(shí)候
●你希望有創(chuàng)建一個(gè)共享的、可變對(duì)象的時(shí)候

在Swift里面,數(shù)組(Array)、字符串(String)、字典(Dictionary)都屬于值類(lèi)型。它們就像C語(yǔ)言里面簡(jiǎn)單的int值,是一個(gè)個(gè)獨(dú)立的數(shù)據(jù)個(gè)體。你不需要花任何功夫來(lái)防范其他代碼在暗地里修改它們。更重要的是,你可以在線(xiàn)程之間安全的傳遞變量,而不需要特地去同步。在Swift高安全性的精神下,這個(gè)模式會(huì)幫助你用Swift寫(xiě)出更可控的代碼。

相關(guān)文章

  • 關(guān)于swift的個(gè)人小結(jié)

    關(guān)于swift的個(gè)人小結(jié)

    本文是個(gè)人對(duì)于目前學(xué)習(xí)swift的一些心得的匯總,這里分享給大家,希望大家能夠喜歡
    2016-12-12
  • Swift簡(jiǎn)單快速的動(dòng)態(tài)更換app圖標(biāo)AppIcon方法示例

    Swift簡(jiǎn)單快速的動(dòng)態(tài)更換app圖標(biāo)AppIcon方法示例

    這篇文章主要為大家介紹了Swift動(dòng)態(tài)更換app圖標(biāo)AppIcon的簡(jiǎn)單快速方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift中通過(guò)疊加UILabel實(shí)現(xiàn)混合進(jìn)度條的方法

    Swift中通過(guò)疊加UILabel實(shí)現(xiàn)混合進(jìn)度條的方法

    這篇文章主要介紹了Swift中通過(guò)疊加UILabel實(shí)現(xiàn)混合進(jìn)度條的方法的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • Swift 編程語(yǔ)言入門(mén)教程

    Swift 編程語(yǔ)言入門(mén)教程

    今天在網(wǎng)上看到一篇非常好的Swift 編程語(yǔ)言入門(mén)教程,分享給大家
    2014-08-08
  • 深入解析Swift代理模式

    深入解析Swift代理模式

    委托(代理)是一種設(shè)計(jì)模式,它允許類(lèi)或結(jié)構(gòu)體將一些需要它們負(fù)責(zé)的功能交由(委托)給其他的類(lèi)型。下面這篇文章主要介紹了Swift代理模式的相關(guān)資料,文章開(kāi)始先介紹了Objective-C相關(guān)的內(nèi)容,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • Swift實(shí)現(xiàn)代碼混淆詳解

    Swift實(shí)現(xiàn)代碼混淆詳解

    本文詳細(xì)講解了Swift實(shí)現(xiàn)代碼混淆的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2021-11-11
  • Swift 4最全的新特性詳細(xì)解析(推薦)

    Swift 4最全的新特性詳細(xì)解析(推薦)

    Swift 4 在 Swift 3 的基礎(chǔ)上,提供了更強(qiáng)大的穩(wěn)健性和穩(wěn)定性。所以下面這篇文章就來(lái)給大家總結(jié)介紹關(guān)于Swift4新特性的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-11-11
  • Swift自定義iOS中的TabBarController并為其添加動(dòng)畫(huà)

    Swift自定義iOS中的TabBarController并為其添加動(dòng)畫(huà)

    這篇文章主要介紹了Swift自定義iOS中的TabBarController并為其添加動(dòng)畫(huà)的方法,即自定義TabBarController中的的TabBar并為自定義的TabBar增加動(dòng)畫(huà)效果,需要的朋友可以參考下
    2016-04-04
  • Objective-C和Swift的轉(zhuǎn)換速查手冊(cè)(推薦)

    Objective-C和Swift的轉(zhuǎn)換速查手冊(cè)(推薦)

    這篇文章主要給大家介紹了關(guān)于Objective-C和Swift的轉(zhuǎn)換速查手冊(cè)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),非常推薦給大家參考學(xué)習(xí)使用,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)不
    2018-06-06
  • Swift版使用ThPullRefresh實(shí)現(xiàn)下拉上拉刷新數(shù)據(jù)

    Swift版使用ThPullRefresh實(shí)現(xiàn)下拉上拉刷新數(shù)據(jù)

    這篇文章主要介紹了Swift版使用ThPullRefresh實(shí)現(xiàn)下拉上拉刷新數(shù)據(jù),需要的朋友可以參考下
    2016-01-01

最新評(píng)論

集贤县| 奉贤区| 福安市| 岳阳市| 利津县| 卢湾区| 汕尾市| 广宗县| 富顺县| 家居| 临武县| 五寨县| 德庆县| 五原县| 卢氏县| 徐水县| 河曲县| 烟台市| 衡南县| 理塘县| 泽库县| 利辛县| 磴口县| 林西县| 嘉义县| 扎兰屯市| 荥经县| 剑河县| 开封市| 万年县| 金寨县| 隆德县| 长沙县| 邢台市| 蓬安县| 赤壁市| 绍兴市| 托克逊县| 谢通门县| 上思县| 岫岩|