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.