Intern
Τι είναι οι τύποι δεδομένων και ποιοι υπάρχουν;
sobes.tech AI
Απάντηση από AI
Οι τύποι δεδομένων καθορίζουν το σύνολο των πιθανών τιμών και τις λειτουργίες που μπορούν να εκτελεστούν πάνω τους. Στο Swift, χωρίζονται σε Τύπους Αξίας και Τύπους Αναφοράς.
Τύποι Αξίας:
- Οι τιμές αντιγράφονται κατά την ανάθεση ή την μεταβίβαση σε μια συνάρτηση.
- Κάθε μεταβλητή ή σταθερά διατηρεί ένα ανεξάρτητο αντίγραφο των δεδομένων.
- Οι αλλαγές σε ένα αντίγραφο δεν επηρεάζουν τα άλλα.
Παραδείγματα Τύπων Αξίας:
- Δομές (
struct) - Enum (
enum) - Τυπώματα (
tuple) - Βασικοί τύποι:
Int,Double,Bool,String, πίνακες (Array), λεξικά (Dictionary), σύνολα (Set).
// Παράδειγμα Τύπου Αξίας: struct
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // το p2 λαμβάνει ένα αντίγραφο του p1
p2.x = 10 // Η αλλαγή στο p2 δεν επηρεάζει το p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
Τύποι Αναφοράς:
- Οι τιμές δεν αντιγράφονται. Κατά την ανάθεση ή τη μεταβίβαση
- σε μια συνάρτηση, περνάει μια αναφορά στην ίδια την παρουσία δεδομένων στη μνήμη.
- Πολλές μεταβλητές ή σταθερές μπορούν να αναφέρονται στην ίδια παρουσία.
- Οι αλλαγές μέσω μιας αναφοράς είναι ορατές σε όλες τις άλλες.
Παραδείγματα Τύπων Αναφοράς:
- Κλάσεις (
class) - Συναρτήσεις (
func) - Κλείσιμο (
closure)
// Παράδειγμα Τύπου Αναφοράς: class
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
}
var c1 = Circle(radius: 5.0)
var c2 = c1 // το c2 αναφέρεται στην ίδια παρουσία με το c1
c2.radius = 10.0 // Η αλλαγή στο c2 επηρεάζει και το c1
print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0
Πίνακας με βασικούς τύπους:
| Κατηγορία | Τύπος(οι) | Τύπος Αξίας/Αναφοράς | Περιγραφή |
|---|---|---|---|
| Ακέραιοι | Int, UInt, Int8, UInt8 κ.ά. |
Αξία | Ακέραιοι αριθμοί διαφόρων μεγεθών, με και χωρίς πρόσημο |
| Πλωτοί αριθμοί | Float, Double |
Αξία | Αριθμοί με δεκαδικό μέρος |
| Boolean | Bool |
Αξία | Λογικές τιμές (true ή false) |
| Συμβολοσειρές | String |
Αξία | Ακολουθία χαρακτήρων |
| Συλλογές | Array, Dictionary, Set |
Αξία | Ταξινομημένες/μη ταξινομημένες συλλογές ομοειδών στοιχείων |
| Δομές | struct |
Αξία | Σύνθετοι τύποι που αποθηκεύουν σχετικές τιμές |
| Enum | enum |
Αξία | Ορίζουν γενικό τύπο για ομάδα σχετικών τιμών |
| Τυπώματα | (value1, value2, ...) |
Αξία | Ομαδοποιούν πολλαπλές τιμές σε έναν σύνθετο τύπο |
| Κλάσεις | class |
Αναφορά | Σύνθετοι τύποι που υποστηρίζουν κληρονομικότητα και συμπεριφορά αναφοράς |
| Συναρτήσεις | () -> Void, (Int) -> String κ.ά. |
Αναφορά | Μπλοκ κώδικα που εκτελείται |
| Κλείσιμο | { (parameters) -> return type in code } |
Αναφορά | Αυτόνομα μπλοκ κώδικα που μπορούν να μεταβιβαστούν και να χρησιμοποιηθούν |
| Επιλογείς | Type? (συντακτική ζάχαρη για Optional<Type>) |
Αξία | Αντιπροσωπεύει είτε μια τιμή τύπου Type, είτε την απουσία της (nil) |
Η επιλογή μεταξύ Τύπων Αξίας και Τύπων Αναφοράς εξαρτάται από την εργασία: Οι Τύποι Αξίας προτιμώνται για μικρά δεδομένα και ασφάλεια νημάτων, οι Τύποι Αναφοράς για πολύπλοκα αντικείμενα που απαιτούν κοινή κατάσταση και κληρονομικότητα.