Struktuuri ja klassi erinevus Swiftis.

Iga kiire arendaja, kellel on vähemalt 6-kuuline kogemus, teab Structist, Enumist ja klassist. Kõik kasutavad neid regulaarselt, teadmata, mis need on ning millal ja kus neid kasutada. Püüan selle lihtsaks teha.

pildi allikas: stocksnap

Väärtuse tüübid ja võrdlustüübid

Viide: TreeHouse, Apple doc.

Enumidest, kokkuvõtetest ja klassidest rääkides on oluline teada väärtuse ja võrdlustüüpide erinevust. Kui loote enumi või struktuuri, on see väärtustüüp ja klass viitetüüp.

  • Väärtuse tüüp: Struct, Enum
  • Viite tüüp: klass

Kui liigute klassiobjekti ümber oma programmi, saadate tegelikult viite sellele objektile, nii et programmi erinevad osad saavad teie objekti jagada ja muuta. Kui läbite oma programmi ümber struktuuri [või enum], läheb see ümber selle struktuuri koopiaks. Nii et struktuurimuudatusi ei jagata.

Väärtustüüpide üks peamisi eeliseid on see, et need on niidikindlad ega vaja sünkroonimist.
Lisateavet väärtuse tüüpide ja viitetüüpide kohta lugege minu artiklist Väärtuse tüüp vs võrdlustüüp.
Enumide kohta lisateabe saamiseks lugege kiiresti minu artiklit Enums.
Klassi eksemplari nimetatakse traditsiooniliselt objektiks. Kuid parem on kasutada mõistet instantsioon, kuna tegemist on ka struktuuri ja enumiga.

Klass

OOP-is on klass klass, millest luuakse üksikud eksemplarid.

Klass on objekt objektide (teatud andmestruktuuri) loomiseks, oleku algväärtuste (liikme muutujad või atribuudid) ja käitumise (liikme funktsioonid või meetodid) loomiseks.

Klassi määratleme klassi märksõna abil.

Struct

Struktuur on määratluse ja esinemisjuhtude loomise poolest sarnane klassiga.

Struktuuri määratleme strukti märksõna abil.

Millised on tavalised tegurid struktuuri ja klassi vahel?

  • Määrake atribuudid väärtuste salvestamiseks
  • Määratlege funktsionaalsuse pakkumise meetodid
  • Määratlege alamkirjad, mis võimaldavad juurdepääsu nende väärtustele, kasutades alaindeksi süntaksi
  • Algseisundi seadistamiseks määrake initsialiseerijad
  • Laiendage, et laiendada nende funktsionaalsust ka vaikekujundusest väljaspool
  • Teatud tüüpi funktsionaalsuse tagamiseks vastake protokollidele

Klassidel on lisavõimalusi, mida struktuuridel pole:

  • Pärimine võimaldab ühel klassil pärida teise omadused. Struct või enum ei saa pärandit teha. Kuid nad saavad protokollidele kinnitada.
  • Tüüpi ülekandmine võimaldab teil kontrollida ja tõlgendada käituse ajal klassi esinemisjuhu tüüpi.
  • Deinitialiseerijad võimaldavad klassi eksemplaril vabastada kõik määratud ressursid.
  • Viidete loendamine võimaldab rohkem kui ühte viidet klassi eksemplarile.
Kuna klass on võrdlustüüp ja see toetab pärimist, suureneb keerukus. Enamikul juhtudel peaks teie vajaduste rahuldamiseks piisama konstruktsioonist. Kasutage klassi, kui see on sobiv või vajalik.

Süntaks

Me määratleme klassi kasutades klassi märksõna ja struktuuri kasutades struktuurset märksõna. Süntaks on sama nii struktuuri kui ka klassi puhul.

Struktuuritüüpide liikmeskonna algatajad

Kõigil struktuuridel on automaatselt genereeritud liikmeline initsiaator, mida saate kasutada uue struktuuri eksemplaride liikme atribuutide initsialiseerimiseks. Uue eksemplari atribuutide algväärtused saab nime kaudu liikmeskonna algatajale üle anda:

struct Resolutsioon {
var laius = 0
var kõrgus = 0
}
las vga = eraldusvõime (laius: 640, kõrgus: 480)

Erinevalt struktuuridest ei saa klassieksemplarid vaikimisi liikmelisena käivitajat.

Märkus. Kui struktuurimuutuja on privaatne, muutub liikmelisena käivitatav privaatseks. peame sel juhul pakkuma avaliku liikme algataja.

Millal ja kus neid kasutada?

Objektiivis - C kõik alamklassid NSObjectist. NSString, NSArray jne on kõik võrdlustüübid. Teisest küljest on swift väärtuslikku tüüpi rikas. String, Massiiv, Sõnastik jne on kõik struudid kiiresti, mis on väärtuse tüüp. Väärtuse tüübi kasutamisel võrdlustüübiga on nii palju eeliseid.

Lisateavet väärtuse tüüpide ja viitetüüpide kohta lugege minu artiklist Väärtuse tüüp vs võrdlustüüp.

Minu arvates peaksime kasutama structit, kuna need vähendavad oluliselt keerukust ja klassidesse tagasilangevust, kui struktuuri struktuur muutub väga suureks või nõuab pärandit.

  • Struktuurid on palju turvalisemad ja vigadeta, eriti mitme keermega keskkonnas. Kiirväärtuse tüüpe hoitakse virnas. Protsessis on igal niidil oma virna ruum, seega ei pääse ükski teine ​​lõim teie väärtuse tüübile otse juurde. Seega puuduvad võistlustingimused, lukud, ummikud ega sellega seotud keermete sünkroniseerimise keerukus.
  • Kasutage klasse, kui soovite võrdlustüüpe. Kui soovite väärtustüüpe, kasutage struktuure.
  • Ehkki struct ja enum ei toeta pärimist, sobivad need suurepäraselt protokollidele orienteeritud programmeerimiseks. Alamklass pärib superklassilt kõik nõutavad ja soovimatud funktsioonid ning see on halb programmeerimispraktika. Parem on kasutada protokollile orienteeritud programmeerimise kontseptsiooni, mis lahendab ülalnimetatud probleemi.
  • Klass toetab pärimist. Klass on võrdlustüüp ja seda hoitakse mälu hunnikus, mis muudab klassi jõudluse osas suhteliselt aeglasemaks kui konstruktsioon. Erinevalt klassist luuakse virna konstruktsioon. Niisiis, struktuuri on kiirem realiseerida (ja hävitada) kui klassi. Kui struct pole klassi liige, siis jaotatakse see koos kõige muuga hunnikusse.
  • Väärtustüübid ei vaja dünaamilist mälujaotust ega viidete loendamist - mõlemad on kallid toimingud. Samal ajal saadetakse väärtustüüpide meetodid staatiliselt. Need loovad toimivuse osas tohutu eelise väärtustüüpide kasuks.

Peab lugema: Konstruktsioonide ja klasside vahel valimine - Apple doc

Naudi !!

Kui teile meeldis seda postitust lugeda, siis palun jagage ja andke mõned plaksutused, et teised leiaksid selle üles !!!!

Värskeid artikleid saate minust jälgida keskkonnas. Samuti looge minuga ühendust LinkedInis.

Kui teil on kommentaare, küsimusi või soovitusi, postitage need allpool olevasse kommentaaride jaotisesse!