Подсчёт и перебор символов
Корректно перебирайте текст, включая эмодзи и сочетания с диакритикой.
«Подсчёт и перебор символов» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Подсчёт символов
Свойство count типа String возвращает количество значений Character, то есть количество символов, воспринимаемых пользователем.
let word = "Swift"
print(word.count)Количество соответствует видимым символам
Поскольку Swift считает кластеры графем, буква с диакритическим знаком или emoji считается одним символом — именно так её видит читатель.
let cafe = "caf\u{e9}"
print(cafe.count)Корректный подсчёт emoji
Один emoji считается одним символом, даже если внутри он занимает несколько байтов и скаляров.
let s = "Hi\u{1F600}"
print("Characters:", s.count)Сложные emoji тоже считаются одним символом
Даже emoji из нескольких скаляров, например изображение семьи или флаг, считаются одним Character, в отличие от наивного подсчёта байтов или скаляров.
let flag = "\u{1F1FA}\u{1F1F8}"
print("Characters:", flag.count)
print("Scalars:", flag.unicodeScalars.count)Перебор с помощью for-in
Цикл for-in по строке последовательно посещает каждый Character, корректно переходя через кластеры графем.
for ch in "a\u{1F600}b" {
print(ch)
}Подсчёт определённых символов
Чтобы подсчитать вхождения определённого символа, объедините перебор со счётчиком или используйте filter.
let text = "banana"
let aCount = text.filter { $0 == "a" }.count
print("a appears:", aCount)Проверка на пустоту
Предпочитайте isEmpty сравнению count с нулём: так код понятнее и иногда работает быстрее.
let s = ""
print(s.isEmpty)
print("hello".isEmpty)Индексация основана не на целых числах
Поскольку символы имеют разный размер, строки Swift используют String.Index, а не целочисленные индексы.
let word = "Swift"
let first = word[word.startIndex]
print(first)Перебор с индексами
Если нужны и позиция, и символ, можно выполнять перебор с помощью indices.
let word = "Hi"
for i in word.indices {
print(word[i])
}Перебор с числовыми смещениями
Используйте enumerated(), чтобы получать возрастающее целочисленное смещение вместе с каждым символом.
for (i, ch) in "abc".enumerated() {
print(i, ch)
}Зачем нужен корректный подсчёт
Подсчёт кластеров графем позволяет интуитивно выполнять проверку длины, обрезку и проверку корректности для интернационального текста и emoji.
let name = "Jose\u{301}"
print("Visible length:", name.count)Быстрая проверка
Вспомните, как Swift считает один emoji.
Итоги: подсчёт и перебор символов
Вы узнали, что count возвращает количество кластеров графем, поэтому emoji и буквы с диакритическими знаками считаются одним символом, что for-in корректно перебирает символы, что строки используют String.Index, а не целые числа, и что enumerated() предоставляет смещения.
let s = "ab\u{1F600}"
print("Count:", s.count)
for (i, ch) in s.enumerated() { print(i, ch) }Часто задаваемые вопросы
Урок «Подсчёт и перебор символов» бесплатный?
Да — полный текст урока «Подсчёт и перебор символов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Подсчёт и перебор символов»?
Корректно перебирайте текст, включая эмодзи и сочетания с диакритикой. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Подсчёт и перебор символов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Символы и графемные кластеры
- Скалярные значения Unicode и кодовые точки
- Подсчёт и перебор символов
- Представления кодировок: utf8, utf16, unicodeScalars