Μια συμβολοσειρά αναπαριστά δεδομένα κειμένου.
Στη 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 💖
Σε αυτή την άσκηση θα γράψεις κώδικα για να βοηθήσεις μια εταιρεία πινακίδων να δημιουργεί προσαρμοσμένα μηνύματα για τις πινακίδες της.
Όρισε τις παρακάτω σταθερές συμβολοσειρές που θα χρησιμοποιηθούν για τη δημιουργία πινακίδων:
birthday: Περιέχει την τιμή "Birthday"valentine: Περιέχει την τιμή "Valentine's Day"anniversary: Περιέχει τη συμβολοσειρά "Anniversary"Όρισε τους παρακάτω σταθερούς χαρακτήρες που θα χρησιμοποιηθούν για τη δημιουργία πινακίδων:
space: Περιέχει την τιμή " " (ένα μόνο κενό)exclamation: Περιέχει την τιμή "!"Υλοποίησε τη συνάρτηση buildSign(for:name:), η οποία παίρνει το όρισμα for που περιέχει μία από τις τρεις συμβολοσειρές που όρισες στην πρώτη εργασία και το όρισμα name που είναι μια συμβολοσειρά που περιέχει το όνομα του ατόμου για το οποίο προορίζεται η πινακίδα.
Θα χρησιμοποιήσεις τη συνένωση για να χτίσεις το μήνυμα της πινακίδας και θυμήσου να επαναχρησιμοποιήσεις τις σταθερές που έχεις ήδη ορίσει.
Η συνάρτηση θα πρέπει να επιστρέφει το μήνυμα της πινακίδας ως συμβολοσειρά.
buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"
buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"
Υλοποίησε τη συνάρτηση graduationFor(name:year:), η οποία παίρνει το όρισμα name που είναι μια συμβολοσειρά που περιέχει το όνομα του ατόμου για το οποίο προορίζεται η πινακίδα και το όρισμα year που είναι ένας ακέραιος που περιέχει το έτος αποφοίτησης του ατόμου.
Θα χρησιμοποιήσεις συμβολοσειρές προτύπων για να χτίσεις το μήνυμα της πινακίδας.
Η συνάρτηση θα πρέπει να επιστρέφει το μήνυμα της πινακίδας ως συμβολοσειρά.
graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"
Υλοποίησε τη συνάρτηση costOf(sign:), η οποία παίρνει το όρισμα sign που είναι μια συμβολοσειρά που περιέχει το μήνυμα της πινακίδας.
Η πινακίδα έχει βασική τιμή 20 στο νόμισμα που δίνεται. Επιπλέον, κάθε γράμμα κοστίζει 2 (τα κενά συμπεριλαμβάνονται στον υπολογισμό).
Η συνάρτηση θα πρέπει να επιστρέφει το κόστος της πινακίδας ως ακέραιο.
costOf(sign: "Happy Birthday Grandma!")
// returns 66
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Swift με 35 έννοιες116 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.