第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么選擇結(jié)構(gòu)而不是班級(jí)?

為什么選擇結(jié)構(gòu)而不是班級(jí)?

DIEA 2019-07-03 11:04:58
為什么選擇結(jié)構(gòu)而不是班級(jí)?玩SWIFT,來自Java背景,你為什么要選擇一個(gè)Struct而不是一個(gè)類呢?看起來他們是一樣的東西,結(jié)構(gòu)提供較少的功能。那為什么要選呢?
查看完整描述

3 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

根據(jù)非常流行的WWDC 2015對(duì)話協(xié)議編程,在SWIFT(視頻成績(jī)單),SWIFT提供了許多特性,使結(jié)構(gòu)在許多情況下優(yōu)于類。

如果結(jié)構(gòu)相對(duì)較小且可復(fù)制,則結(jié)構(gòu)更可取,因?yàn)閺?fù)制比對(duì)同一個(gè)實(shí)例的多個(gè)引用要安全得多,就像類一樣。在將變量傳遞給許多類和/或多線程環(huán)境中時(shí),這一點(diǎn)尤為重要。如果您總是可以將變量的副本發(fā)送到其他地方,則不必?fù)?dān)心另一個(gè)地方更改您下面變量的值。

有了Structs,就不需要擔(dān)心內(nèi)存泄漏或多線程爭(zhēng)先恐后地訪問/修改變量的單個(gè)實(shí)例了。(對(duì)于技術(shù)上來說,這方面的例外是在閉包中捕獲一個(gè)結(jié)構(gòu),因?yàn)樗鼘?shí)際上是捕獲對(duì)實(shí)例的引用,除非您顯式地標(biāo)記為要復(fù)制它)。

類也可能膨脹,因?yàn)轭愔荒軓膯蝹€(gè)超類繼承。這鼓勵(lì)我們創(chuàng)建巨大的超類,包含許多不同的能力,而這些能力只是松散相關(guān)的。使用協(xié)議,特別是與協(xié)議擴(kuò)展一起使用協(xié)議,可以為協(xié)議提供實(shí)現(xiàn),從而消除了類來實(shí)現(xiàn)此類行為的需要。

討論中列出了一些首選類的場(chǎng)景:

  • 復(fù)制或比較實(shí)例沒有意義(例如,窗口)
  • 實(shí)例生存期與外部影響相關(guān)聯(lián)(例如,TemporaryFile)
  • 實(shí)例只是“接收器”-只寫到外部狀態(tài)的管道(例如CGContext)。

這意味著結(jié)構(gòu)應(yīng)該是默認(rèn)的,類應(yīng)該是備用的。

另一方面,SWIFT編程語言文件有些矛盾:

結(jié)構(gòu)實(shí)例總是通過值傳遞,類實(shí)例總是通過引用傳遞。這意味著它們適合于不同類型的任務(wù)。在考慮項(xiàng)目所需的數(shù)據(jù)結(jié)構(gòu)和功能時(shí),請(qǐng)確定每個(gè)數(shù)據(jù)結(jié)構(gòu)應(yīng)該定義為類還是結(jié)構(gòu)。

作為一般指導(dǎo)方針,考慮在下列一個(gè)或多個(gè)條件適用時(shí)創(chuàng)建一個(gè)結(jié)構(gòu):

  • 該結(jié)構(gòu)的主要目的是封裝一些相對(duì)簡(jiǎn)單的數(shù)據(jù)值。
  • 在分配或傳遞該結(jié)構(gòu)的實(shí)例時(shí),可以合理地預(yù)期封裝的值將被復(fù)制,而不是引用。
  • 結(jié)構(gòu)存儲(chǔ)的任何屬性本身都是值類型,它們也將被復(fù)制而不是引用。
  • 該結(jié)構(gòu)不需要從另一個(gè)現(xiàn)有類型繼承屬性或行為。

良好的結(jié)構(gòu)候選例子包括:

  • 幾何形狀的大小,可能封裝了一個(gè)寬度屬性和一個(gè)高度屬性,兩者都屬于Double類型。
  • 一種在系列中引用范圍的方法,可能會(huì)封裝Int類型的Start屬性和Length屬性。
  • 三維坐標(biāo)系中的一個(gè)點(diǎn),可能封裝了x、y和z的屬性,每個(gè)屬性都是Double類型的。

在所有其他情況下,定義一個(gè)類,并創(chuàng)建要通過引用管理和傳遞的該類實(shí)例。實(shí)際上,這意味著大多數(shù)自定義數(shù)據(jù)構(gòu)造應(yīng)該是類,而不是結(jié)構(gòu)。

在這里,它聲稱我們應(yīng)該默認(rèn)使用類,并且只在特定的情況下使用結(jié)構(gòu)。最終,您需要了解值類型與引用類型的真實(shí)含義,然后您可以對(duì)何時(shí)使用結(jié)構(gòu)或類做出明智的決定。此外,請(qǐng)記住,這些概念一直在發(fā)展,SWIFT編程語言文檔是在面向協(xié)議的編程演講之前編寫的。


查看完整回答
反對(duì) 回復(fù) 2019-07-03
  • 3 回答
  • 0 關(guān)注
  • 569 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)