Sobes.tech
Intern

Mi azok az adattípusok és melyek léteznek?

sobes.tech MI

Válasz az MI-től

Az adattípusok meghatározzák a lehetséges értékek halmazát és azokat a műveleteket, amelyeket rajtuk végre lehet hajtani. Swift-ben ezek értéktípusokra és referencia típusokra oszlanak.

Értéktípusok:

  • Az értékek másolódnak az érték hozzárendelésekor vagy átadásakor függvénynek.
  • Minden változó vagy állandó saját, független másolatot tartalmaz az adatokról.
  • Egy másolatban végrehajtott módosítások nem befolyásolják a többit.

Értéktípus példák:

  • Struktúrák (struct)
  • Enumerációk (enum)
  • Tuple-k (tuple)
  • Alap típusok: Int, Double, Bool, String, tömbök (Array), szótárak (Dictionary), halmazok (Set).
// Értéktípus példa: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 másolatot kap p1-ről
p2.x = 10 // A p2 módosítása nem befolyásolja p1-et

print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

Referencia típusok:

  • Az értékek nem másolódnak. Továbbításkor vagy hozzárendeléskor
  • ugyanarra az adatpéldányra mutató hivatkozás kerül átadásra a memóriában.
  • Több változó vagy állandó is hivatkozhat ugyanarra az példányra.
  • A módosítások egy hivatkozáson keresztül minden másiknál láthatók.

Referencia típus példák:

  • Osztályok (class)
  • Függvények (func)
  • Zárványok (closure)
// Referencia típus példa: class
class Circle {
    var radius: Double

    init(radius: Double) {
        self.radius = radius
    }
}

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 ugyanarra az példányra mutat
c2.radius = 10.0 // A c2 módosítása hatással van c1-re

print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0

Fő típusok táblázata:

Kategória Típus(ok) Érték/Referencia típus Leírás
Egész számok Int, UInt, Int8, UInt8 stb. Érték Különböző méretű, előjeles és előjel nélküli egész számok
Lebegőpontos számok Float, Double Érték Törtrészes számok
Logikai értékek Bool Érték Logikai értékek (true vagy false)
Szövegek String Érték Karakterláncok
Gyűjtemények Array, Dictionary, Set Érték Rendezett/nem rendezett gyűjtemények azonos típusú elemekkel
Struktúrák struct Érték Összetett, felhasználó által definiált típusok, amelyek kapcsolódó értékeket tartalmaznak
Enumerációk enum Érték Általános típus meghatározása kapcsolódó értékek csoportjára
Tuple-k (value1, value2, ...) Érték Több érték csoportosítása egy összetett típusba
Osztályok class Referencia Összetett felhasználó által definiált típusok, öröklést és referencia viselkedést támogatnak
Függvények () -> Void, (Int) -> String stb. Referencia Futtatható kódrészek
Zárványok { (parameters) -> return type in code } Referencia Önálló kódrészek, amelyeket át lehet adni és használni
Opciók Type? (szintaktikus cukor az Optional<Type>-hez) Érték Egy Type típusú értéket vagy annak hiányát (nil) jelöl

A választás az Érték típusok és a Referencia típusok között a feladattól függ: az Érték típusok kisebb adatokhoz és szálbiztonsághoz előnyösebbek, a Referencia típusok összetettebb objektumokhoz, amelyek közös állapotot és öröklést igényelnek.