Διαδρομές
/
Swift
Swift
/
Ασκήσεις
/
Το κατάστημα πινακίδων κατά παραγγελία του Cal
Το κατάστημα πινακίδων κατά παραγγελία του Cal

Το κατάστημα πινακίδων κατά παραγγελία του Cal

Άσκηση εκμάθησης

Εισαγωγή

Μια συμβολοσειρά αναπαριστά δεδομένα κειμένου. Στη Swift, μια String είναι μια διατεταγμένη συλλογή από τιμές Character, όπου κάθε χαρακτήρας αναπαριστά έναν χαρακτήρα Unicode.

Μπορείς να δημιουργήσεις μια συμβολοσειρά μέσα από ένα κυριολεκτικό συμβολοσειράς, που είναι μια σειρά χαρακτήρων κλεισμένη σε διπλά εισαγωγικά ("). Για συμβολοσειρές πολλών γραμμών, χρησιμοποίησε τρία διπλά εισαγωγικά ("""):

let hello: String = "Hello, World!"

let poem: String = """
Roses are red,
Violets are blue.
Sugar is sweet,
And so are you.
"""

Οι συμβολοσειρές στη Swift συνεργάζονται άψογα με την κλάση NSString του framework Foundation, παρέχοντας πρόσβαση σε εκτεταμένες δυνατότητες επεξεργασίας κειμένου.

Χαρακτήρες

Ένα Character αναπαριστά ένα μόνο εκτεταμένο σύμπλεγμα γραφημάτων, έναν χαρακτήρα αναγνώσιμο από τον άνθρωπο, που αποτελείται από μία ή περισσότερες τιμές βαθμωτού Unicode. Μια τιμή βαθμωτού Unicode είναι ένα κωδικό σημείο 21 bit στην περιοχή από U+0000 έως U+D7FF συμπεριλαμβανομένων ή από U+E000 έως U+10FFFF συμπεριλαμβανομένων.

let aChar: Character = "A"

Εξαγωγή τύπου

Όταν γράφεις ένα κυριολεκτικό συμβολοσειράς, η Swift συμπεραίνει αυτόματα τον τύπο του ως String. Για να αποθηκεύσεις έναν μόνο χαρακτήρα ως Character, πρέπει να δώσεις έναν ρητό σχολιασμό τύπου:

let aString = "A"        // Inferred as String
let aChar: Character = "A" // Explicitly typed as Character
print(type(of: aString)) // Prints String
print(type(of: aChar))   // Prints Character

// The following code will not compile:
let badChar: Character = "Too many characters"
// Error: Cannot convert value of type 'String' to specified type 'Character'

Συνένωση

Μπορείς να ενώσεις συμβολοσειρές χρησιμοποιώντας τον τελεστή πρόσθεσης (+):

print("honey" + "comb")
// Prints "honeycomb"

Δεν μπορείς να συνενώσεις απευθείας ένα Character με μια String χρησιμοποιώντας το + χωρίς πρώτα να μετατρέψεις τον χαρακτήρα σε συμβολοσειρά. Ωστόσο, μπορείς να χρησιμοποιήσεις τη μέθοδο append(_:) για να προσθέσεις στο τέλος είτε μια συμβολοσειρά είτε έναν χαρακτήρα απευθείας σε μια μεταβλητή συμβολοσειρά:

var greeting = "Hello"
let world = ", world"
let period: Character = "."

greeting.append(world)
print(greeting) // Prints "Hello, world"

greeting.append(period)
print(greeting) // Prints "Hello, world."

Παρεμβολή συμβολοσειρών

Η παρεμβολή συμβολοσειρών σου επιτρέπει να κατασκευάσεις μια συμβολοσειρά ενσωματώνοντας σταθερές, μεταβλητές, κυριολεκτικά και εκφράσεις μέσα σε κυριολεκτικά συμβολοσειράς. Τύλιξε κάθε έκφραση σε παρενθέσεις που προηγούνται από έναν χαρακτήρα ανάστροφης καθέτου (\( ... )):

let radius = 5.0
let circle = "The area of a circle with radius \(radius) is \(Double.pi * radius * radius)"
print(circle) // Prints "The area of a circle with radius 5.0 is 78.53981633974483"

Ιδιότητες συμβολοσειρών και χαρακτήρων

Οι συμβολοσειρές και οι χαρακτήρες προσφέρουν αρκετές ιδιότητες για να εξετάσεις το περιεχόμενό τους.

Ιδιότητες συμβολοσειράς

Μερικές συνηθισμένες ιδιότητες συμβολοσειράς είναι οι εξής:

Ιδιότητα Περιγραφή Παράδειγμα
isEmpty Επιστρέφει true αν η συμβολοσειρά δεν έχει χαρακτήρες "Hello".isEmpty αξιολογείται σε false
count Επιστρέφει τον αριθμό των χαρακτήρων στη συμβολοσειρά "Hello".count αξιολογείται σε 5

Για έναν πλήρη κατάλογο ιδιοτήτων, δες την τεκμηρίωση της String της Apple.

Ιδιότητες χαρακτήρα

Μερικές συνηθισμένες ιδιότητες χαρακτήρα είναι οι εξής:

Ιδιότητα Περιγραφή Παράδειγμα
isLowercase Επιστρέφει true αν ο χαρακτήρας είναι πεζός "a".isLowercase αξιολογείται σε true
isUppercase Επιστρέφει true αν ο χαρακτήρας είναι κεφαλαίος "A".isUppercase αξιολογείται σε true
isNumber Επιστρέφει true αν ο χαρακτήρας είναι ψηφίο "1".isNumber αξιολογείται σε true
isWhitespace Επιστρέφει true αν ο χαρακτήρας είναι κενό διάστημα " ".isWhitespace αξιολογείται σε true

Για έναν πλήρη κατάλογο ιδιοτήτων, δες την τεκμηρίωση της Character της Apple.

Μετατροπή τύπου

Μπορείς να μετατρέψεις άλλους τύπους σε συμβολοσειρές χρησιμοποιώντας τον αρχικοποιητή String(_:), ο οποίος υποστηρίζει τυπικούς τύπους όπως Int, Double και Character:

let charX: Character = "x"
print(String(charX))     // Prints "x"
print(String(110))       // Prints "110"
print(String(Double.pi)) // Prints "3.141592653589793"

Ειδικοί χαρακτήρες

Τα κυριολεκτικά συμβολοσειράς στη Swift υποστηρίζουν αρκετές ακολουθίες διαφυγής για ειδικούς χαρακτήρες:

Ακολουθία Περιγραφή
\0 Χαρακτήρας null
\\ Ανάστροφη κάθετος
\t Οριζόντιος στηλοθέτης
\n Αλλαγή γραμμής
\r Επιστροφή φορείου
\' Μονό εισαγωγικό
\" Διπλό εισαγωγικό
\u{n} Αυθαίρετο βαθμωτό Unicode (δεκαεξαδικό)
let quote: String = "\"Hello\", he said."
print(quote) // Prints "Hello", he said.

let unicode: Character = "\u{1F496}"
print(unicode) // Prints 💖

Οδηγίες

Σε αυτή την άσκηση θα γράψεις κώδικα για να βοηθήσεις μια εταιρεία πινακίδων να δημιουργεί προσαρμοσμένα μηνύματα για τις πινακίδες της.

1. Δημιούργησε ένα σύνολο χρήσιμων συμβολοσειρών

Όρισε τις παρακάτω σταθερές συμβολοσειρές που θα χρησιμοποιηθούν για τη δημιουργία πινακίδων:

  • birthday: Περιέχει την τιμή "Birthday"
  • valentine: Περιέχει την τιμή "Valentine's Day"
  • anniversary: Περιέχει τη συμβολοσειρά "Anniversary"

2. Δημιούργησε ένα σύνολο χρήσιμων χαρακτήρων

Όρισε τους παρακάτω σταθερούς χαρακτήρες που θα χρησιμοποιηθούν για τη δημιουργία πινακίδων:

  • space: Περιέχει την τιμή " " (ένα μόνο κενό)
  • exclamation: Περιέχει την τιμή "!"

3. Συνδύασε φράσεις για να χτίσεις μηνύματα

Υλοποίησε τη συνάρτηση buildSign(for:name:), η οποία παίρνει το όρισμα for που περιέχει μία από τις τρεις συμβολοσειρές που όρισες στην πρώτη εργασία και το όρισμα name που είναι μια συμβολοσειρά που περιέχει το όνομα του ατόμου για το οποίο προορίζεται η πινακίδα. Θα χρησιμοποιήσεις τη συνένωση για να χτίσεις το μήνυμα της πινακίδας και θυμήσου να επαναχρησιμοποιήσεις τις σταθερές που έχεις ήδη ορίσει. Η συνάρτηση θα πρέπει να επιστρέφει το μήνυμα της πινακίδας ως συμβολοσειρά.

buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"

buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"

4. Φτιάξε μια πινακίδα αποφοίτησης

Υλοποίησε τη συνάρτηση graduationFor(name:year:), η οποία παίρνει το όρισμα name που είναι μια συμβολοσειρά που περιέχει το όνομα του ατόμου για το οποίο προορίζεται η πινακίδα και το όρισμα year που είναι ένας ακέραιος που περιέχει το έτος αποφοίτησης του ατόμου. Θα χρησιμοποιήσεις συμβολοσειρές προτύπων για να χτίσεις το μήνυμα της πινακίδας. Η συνάρτηση θα πρέπει να επιστρέφει το μήνυμα της πινακίδας ως συμβολοσειρά.

graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"

5. Υπολόγισε το κόστος μιας πινακίδας

Υλοποίησε τη συνάρτηση costOf(sign:), η οποία παίρνει το όρισμα sign που είναι μια συμβολοσειρά που περιέχει το μήνυμα της πινακίδας. Η πινακίδα έχει βασική τιμή 20 στο νόμισμα που δίνεται. Επιπλέον, κάθε γράμμα κοστίζει 2 (τα κενά συμπεριλαμβάνονται στον υπολογισμό). Η συνάρτηση θα πρέπει να επιστρέφει το κόστος της πινακίδας ως ακέραιο.

costOf(sign: "Happy Birthday Grandma!")
// returns 66
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Swift Exercism

Έτοιμος να ξεκινήσεις την άσκηση Το κατάστημα πινακίδων κατά παραγγελία του Cal;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Swift με 35 έννοιες116 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.