Οι πλειάδες ομαδοποιούν πολλές τιμές σε μία σύνθετη τιμή. Σε αντίθεση με τους πίνακες, οι τιμές σε μια πλειάδα δεν χρειάζεται να έχουν τον ίδιο τύπο, και το μέγεθος μιας πλειάδας είναι σταθερό μόλις δημιουργηθεί.
Για να δημιουργήσεις μια πλειάδα, περικλείεις τις τιμές, χωρισμένες με κόμματα, σε παρενθέσεις:
let order = ("biscuits", 2.99, 3)
Μπορείς επίσης να ορίσεις ρητά τις σημειώσεις τύπου:
let order: (String, Double, Int) = ("biscuits", 2.99, 3)
Για να εξαγάγεις τα επιμέρους στοιχεία από μια ανώνυμη πλειάδα, χρησιμοποίησε τη σύνταξη θέσης με βάση το μηδέν (.0, .1, κ.λπ.):
let item = order.0 // "biscuits"
let quantity = order.2 // 3
Μπορείς να δώσεις ονόματα στα επιμέρους στοιχεία μιας πλειάδας όταν την ορίζεις:
let order = (item: "biscuits", price: 2.99, quantity: 3)
Το να δίνεις ονόματα στα στοιχεία κάνει τον κώδικα πιο ευανάγνωστο και σου επιτρέπει να έχεις πρόσβαση στα στοιχεία χρησιμοποιώντας τη σύνταξη με τελείες και τις ετικέτες τους:
let item = order.item // "biscuits"
let quantity = order.quantity // 3
Μπορείς επίσης να συμπεριλάβεις ονόματα στοιχείων στη σημείωση τύπου:
let order: (item: String, price: Double, quantity: Int) = (item: "biscuits", price: 2.99, quantity: 3)
Αν μια πλειάδα δηλωθεί ως μεταβλητή (var), μπορείς να ενημερώσεις τα στοιχεία της:
var order = ("biscuits", 2.99, 3)
order.0 = "cookies"
order.1 = 1.99
order.2 = 5
print(order)
// Prints ("cookies", 1.99, 5)
Ενώ οι συναρτήσεις στη Swift μπορούν να επιστρέψουν μόνο μία τιμή, επιστρέφοντας μια πλειάδα μπορείς να συσκευάσεις και να επιστρέψεις πολλαπλές τιμές από μια συνάρτηση:
func divide(_ dividend: Int, by divisor: Int) -> (quotient: Int, remainder: Int) {
let quotient = dividend / divisor
let remainder = dividend % divisor
return (quotient, remainder)
}
let result = divide(14, by: 4)
print("Quotient: \(result.quotient), Remainder: \(result.remainder)")
// Prints "Quotient: 3, Remainder: 2"
Μπορείς να αποδομήσεις (να αποσυσκευάσεις) τις τιμές μιας πλειάδας σε ξεχωριστές σταθερές ή μεταβλητές:
let order = ("biscuits", 2.99, 3)
let (item, price, quantity) = order
print(item) // Prints "biscuits"
Η αποδόμηση πλειάδας λειτουργεί επίσης απευθείας σε βρόχους for-in:
let orders = [("biscuits", 2.99, 3), ("cookies", 1.99, 5)]
for (item, price, quantity) in orders {
print("Item: \(item), Price: \(price), Quantity: \(quantity)")
}
Είσαι ένα ξωτικό που δουλεύει στο τμήμα εφοδιασμού του Άγιου Βασίλη και το αφεντικό σου έχει αναθέσει δύο εργασίες για την αναβάθμιση του λογισμικού του συστήματος.
Το σύστημα πρέπει να μπορεί να πάρει το όνομα ενός παιχνιδιού από τη βάση δεδομένων.
Η βάση δεδομένων αποτελείται από πλειάδες τύπου (name: String, quantity: Int).
Υλοποίησε τη συνάρτηση getName(_:), που παίρνει ένα όρισμα το οποίο περιέχει μια πλειάδα τύπου (name: String, quantity: Int).
let toy = (name: "Doll", quantity: 10)
getName(toy)
// Returns "Doll"
Η αγορά παιχνιδιών είναι μια γρήγορη και συνεχώς μεταβαλλόμενη αγορά, αυτό που είναι δημοφιλές αλλάζει πολύ γρήγορα. Γι' αυτό χρειάζεται μια συνάρτηση που δημιουργεί ένα νέο παιχνίδι.
Υλοποίησε τη συνάρτηση createToy(name:amount:), που παίρνει ένα όρισμα name το οποίο περιέχει το όνομα του παιχνιδιού και ένα όρισμα amount το οποίο περιέχει την ποσότητα του παιχνιδιού.
createToy(name: "Doll", amount: 10)
// Returns (name: "Doll", amount: 10)
Τα ξωτικά στο εργαστήρι του Άγιου Βασίλη φτιάχνουν συνέχεια κι άλλα παιχνίδια και ο Άγιος Βασίλης πρέπει να παρακολουθεί την ποσότητα κάθε παιχνιδιού. Για να γίνει αυτό, το σύστημα πρέπει να μπορεί να ενημερώνει την ποσότητα ενός παιχνιδιού στη βάση δεδομένων.
Υλοποίησε τη συνάρτηση updateQuantity(_:toy:Amount:), που παίρνει τα εξής ορίσματα:
toys, το οποίο περιέχει έναν πίνακα από πλειάδες τύπου (name: String, quantity: Int).toy, το οποίο περιέχει το όνομα του παιχνιδιού που θα ενημερωθεί.amount, το οποίο περιέχει τη νέα ποσότητα του παιχνιδιού.Μπορείς να υποθέσεις ότι το παιχνίδι βρίσκεται ήδη στη βάση δεδομένων και δεν χρειάζεται να το ελέγξεις.
let toys = [(name: "Doll", quantity: 10), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]
updateQuantity(toys, toy: "Doll", amount: 15)
// Returns [(name: "Doll", quantity: 15), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]
Ο Άγιος Βασίλης θέλει να μπορεί να κατηγοριοποιεί τα παιχνίδια στη βάση δεδομένων. Έτσι ώστε να μπορεί να βρίσκει εύκολα τα παιχνίδια όταν χρειάζεται να κάνει μια παράδοση και να μπορεί να ταξινομεί τα παιχνίδια στη βάση δεδομένων.
Ωστόσο, όταν το σύστημα υλοποιήθηκε για πρώτη φορά, το κλειδί κατηγορίας ξεχάστηκε. Τώρα το σύστημα πρέπει να μπορεί να προσθέτει ένα κλειδί κατηγορίας σε ένα παιχνίδι στη βάση δεδομένων.
Υλοποίησε τη συνάρτηση addCategory(_:category:), που παίρνει τα εξής ορίσματα:
toys, το οποίο περιέχει έναν πίνακα από πλειάδες τύπου (name: String, quantity: Int).category, το οποίο περιέχει το κλειδί κατηγορίας που θα προστεθεί στα παιχνίδια.Μπορείς να υποθέσεις ότι το παιχνίδι βρίσκεται ήδη στη βάση δεδομένων και δεν χρειάζεται να το ελέγξεις. Μπορείς επίσης να υποθέσεις ότι δεν υπάρχει ήδη κλειδί κατηγορίας στο παιχνίδι.
let toys = [(name: "Car", quantity: 5), (name: "Train", quantity: 3)]
addCategory(toys, category: "Vehicle")
// Returns [(name: "Car", quantity: 5, category: "Vehicle"), (name: "Train", quantity: 3, category: "Vehicle")]
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Swift με 35 έννοιες116 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.