Mismunur á uppbyggingu og bekk í Swift.

Sérhver skjótur verktaki sem hefur að minnsta kosti 6 mánaða reynslu mun vita um Struct, Enum og Class. Allir nota þær reglulega án þess að vita hverjar þær eru og hvenær og hvar á að nota þær. Ég mun reyna að gera það einfalt.

uppspretta myndar: birgðir

Gildistegundir og viðmiðunartegundir

Tilvísun: TreeHouse, Apple doc.

Það er mikilvægt að vita muninn á gildi og viðmiðunartegundum þegar talað er um Enums, Structs og Classes. Alltaf þegar þú býrð til enum eða struct, þá er það gildistegund og Class er tilvísunargerð.

  • Gildistegund: Struct, Enum
  • Tilvísunargerð: Flokkur

Þegar þú framhjá flokki hlut í kringum forritið þitt, þú ert í raun að fara með tilvísun í hlutinn, svo að mismunandi hlutar forritsins geta deilt og breytt hlutnum þínum. Þegar þú gengur framhjá skipulagi [eða enum] í kringum forritið þitt er það sem afritast af uppbyggingunni. Svo að breytingum á mannvirkjum verður ekki deilt.

Einn helsti ávinningur gildistegunda er að þeir eru þráðlausir og þurfa ekki samstillingu.
Vinsamlegast lestu grein mína um Value Type vs Reference Type til að skilja meira um gildi gerða og tilvísunargerða.
Lestu grein mína um Enums í snöggu til að skilja meira um enums.
Dæmi um tegund er venjulega þekkt sem hlutur. En það er betra að nota hugtakið Instance þar sem við erum að fást við struct og enum líka.

Bekk

Í OOP er flokkur teikning sem einstök tilvik eru búin til úr.

Flokkur er teikning til að búa til hluti (ákveðin gagnaskipulag), veita upphafsgildi fyrir ástand (meðlimabreytur eða eiginleikar) og útfærslur á hegðun (meðlimir aðgerðir eða aðferðir).

Við skilgreinum flokk með því að nota flokks leitarorð.

Uppbygging

Uppbygging er svipuð bekknum hvað varðar skilgreiningu og sköpun tilvika.

Við skilgreinum burðarvirki með því að nota strukt lykilorð.

Hverjir eru sameiginlegir þættir á milli burðar og bekkjar?

  • Skilgreindu eiginleika til að geyma gildi
  • Skilgreindu aðferðir til að veita virkni
  • Skilgreindu undirskriftir til að veita aðgang að gildum þeirra með setningafræði áskriftar
  • Skilgreindu frumstilli til að setja upp upphafsstöðu sína
  • Verið aukin til að auka virkni þeirra umfram sjálfgefna framkvæmd
  • Samræmið við samskiptareglur til að veita staðlaða virkni af ákveðinni tegund

Bekkir hafa viðbótargetu sem mannvirki hafa ekki:

  • Erfðir gera einum flokki kleift að erfa einkenni annars. Mannvirki eða enum geta ekki erft. En þeir geta staðfest samskiptareglur.
  • Gerðarútgerð gerir þér kleift að athuga og túlka gerð bekkjarstundar á afturkreistingur.
  • Deinitializers gera kleift að tala um flokk til að losa um öll úrræði sem það hefur úthlutað.
  • Tilvísunartalning leyfir fleiri en eina tilvísun í bekkjarstundu.
Þar sem flokkur er tilvísunargerð og hann styður erfðir eykst flækjan. Í flestum tilvikum ætti mannvirki að vera nóg til að mæta þörfum þínum. Notaðu bekk þegar þeir eru viðeigandi eða nauðsynlegar.

Setningafræði

Við skilgreinum flokk með því að nota flokk leitarorð og uppbyggingu með því að nota struct lykilorð. Setningafræði er sú sama fyrir bæði uppbyggingu og bekk.

Upphafsstillingar meðlimir fyrir uppbyggingu

Öll mannvirki eru með sjálfkrafa myndaða frumstillingu meðlimi, sem þú getur notað til að frumstilla meðlimareiginleika nýrra uppbyggingarfalla. Upphafsgildi fyrir eiginleika nýja atriðisins er hægt að fara til frumstillingar meðlimur með nafni:

struktur Upplausn {
var breidd = 0
var hæð = 0
}
láta vga = Upplausn (breidd: 640, hæð: 480)

Ólíkt mannvirkjum, fá flokksstundir ekki sjálfgefinn upphafsstillingu fyrir aðildarríki.

Athugasemd: Ef burðarvirki er einkamál, verður frumstillir meðlimur vísir. við verðum að útvega opinberan upphafsstillingu fyrir aðild í því tilfelli.

Hvenær og hvar á að nota þá?

Í Markmið - C, allt undirflokkar frá NSObject. NSString, NSArray etc eru allar tilvísunargerðir. Aftur á móti er skjótt auðugt af tegundum gildi. String, Array, Dictionary etc eru allir strúktúrar í skjótum, sem er gildistegund. Það eru svo margir kostir við að nota gildistegund yfir viðmiðunargerð.

Vinsamlegast lestu grein mína um Value Type vs Reference Type til að skilja meira um gildi gerða og tilvísunargerða.

Að mínu mati ættum við að nota struct vegna þess að það dregur mjög úr flækjum og falli til flokka ef mannvirkin verða mjög stór eða þurfa arf.

  • Burðarvirki eru miklu öruggari og gallalaus, sérstaklega í fjölþróuðu umhverfi. Snögg gildi eru geymd í staflinum. Í því ferli hefur hver þráður sitt eigið staflapláss, þannig að enginn annar þráður fær aðgang að gildistegundinni þinni beint. Þess vegna eru engin keppnisskilyrði, læsingar, lokkunarlínur eða flókin tenging við þráða samstillingu.
  • Notaðu flokka ef þú vilt tilvísunargerðir. Notaðu strúktæki ef þú vilt að tegundir gildi.
  • Jafnvel þó að struct og enum styðji ekki arf eru þeir frábærir fyrir samskiptaregluða forritun. Undirflokkur erfir alla nauðsynlega og óæskilega virkni frá ofurflokknum og er slæm forritunarvenja. Betra er að nota mannvirki með samskiptaregluða forritunarhugtak sem lagar ofangreint mál.
  • Bekkurinn styður erfðir. Flokkur er tilvísunargerð og er geymdur í hrúguhluta minni sem gerir flokk tiltölulega hægari en uppbyggingu hvað varðar frammistöðu. Ólíkt bekknum er burðarefni búið til á staflinum. Svo, það er fljótlegra að skjóta (og eyðileggja) mannvirki en stétt. Nema struct sé bekkjarmeðlimur í því tilfelli er honum úthlutað í hrúgu ásamt öllu öðru.
  • Gildistegundir þurfa hvorki kraftmikla úthlutun né tilvísunartalningu, sem báðar eru dýr aðgerð. Á sama tíma eru aðferðir við gildi gerðir sendar með statískum hætti. Þetta skapar gríðarlega yfirburði í þágu gildistegunda hvað varðar afköst.

Verður að lesa: Val á milli mannvirkja og flokka - Apple doc

Njótið !!

Ef þér fannst gaman að lesa þessa færslu, vinsamlegast deildu og gefðu nokkrar klemmur svo aðrir geti fundið hana !!!!

Þú getur fylgst með mér á Medium fyrir nýjar greinar. Hafðu líka samband við mig á LinkedIn.

Ef þú hefur einhverjar athugasemdir, spurningar eða meðmæli, ekki hika við að birta þær í athugasemdahlutanum hér að neðan!