Рядок тексту (англ. string) представляє текстові дані.
У 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 фреймворку Foundation, що відкриває доступ до широких можливостей обробки тексту.
Character представляє один розширений графемний кластер, тобто зрозумілий людині символ, що складається з одного або кількох скалярних значень Unicode.
Скалярне значення Unicode - це 21-бітна кодова точка в діапазоні від 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 evaluates to false
|
count |
Повертає кількість символів у рядку тексту |
"Hello".count evaluates to 5
|
Повний перелік властивостей дивіться в документації Apple про String.
Ось деякі з найпоширеніших властивостей символів:
| Властивість | Опис | Приклад |
|---|---|---|
isLowercase |
Повертає true, якщо символ у нижньому регістрі |
"a".isLowercase evaluates to true
|
isUppercase |
Повертає true, якщо символ у верхньому регістрі |
"A".isUppercase evaluates to true
|
isNumber |
Повертає true, якщо символ є цифрою |
"1".isNumber evaluates to true
|
isWhitespace |
Повертає true, якщо символ є пробільним |
" ".isWhitespace evaluates to true
|
Повний перелік властивостей дивіться в документації Apple про Character.
Щоб перетворити інші типи на рядки тексту, можна скористатися ініціалізатором 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 |
Нульовий символ |
\\ |
Зворотна скісна риска |
\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 💖
У цій вправі ми будемо писати код, який допоможе компанії з виготовлення вивісок створювати індивідуальні повідомлення для своїх вивісок.
Визначмо наведені нижче сталі рядки тексту (англ. string), які будемо використовувати для створення вивісок:
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 вправ та справжнє наставництво від людей, і все це безкоштовно.