💡 Инструкция: Выберите один ответ из пяти. В тесте 30 вопросов, на работу отведено 85 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 6 тематических шкал и подробные объяснения.
Вопрос 1 из 30
Какой итог даст показанный фрагмент, если применять правила Swift буквально, а не угадывать намерение автора? Не упускайте из виду следующее: различие графем, скаляров, кодовых единиц и байтов.
Swift Строки Unicode · фрагмент для разбора Копировать
let text = "👨👩👧👦a"
print(text.count, text.utf8.count)
unicodeScalars.count считает расширенные графемы: здесь два символа, тогда как число UTF-8 байтов значительно больше.
Наблюдаемый результат определяется тем, что `String.count` считает байты UTF-8, а не пользовательские символы.
Фрагмент не требует отдельного условия: `Date` хранит календарь и часовой пояс, использованные при создании.
String.count считает расширенные графемы: здесь два символа, тогда как число UTF-16 байтов значительно больше.
String.count считает расширенные графемы: здесь два символа, тогда как число UTF-8 байтов значительно больше.
Вопрос 14 из 30
Выберите правку, после которой дефект исчезает не только в удачном примере. Не упускайте из виду следующее: абсолютное время и отличие длительности от календарного шага.
Swift Моменты времени Date · фрагмент для разбора Копировать
import Foundation
let now = Date()
let tomorrow = now.addingTimeInterval(24 * 60 * 60)
Нужно адаптировать только вызов `now`, поскольку `Double.init` разбирает строку с учётом текущей локали.
Исправление — оставить контракт прежним и учитывать, что `Calendar.current` одинаков на всех машинах и во всех тестовых окружениях.
Для календарного «завтра» использовать Calendar.date(byAdding:.day,value:2,to:), а интервалы секунд оставлять для физической длительности.
Достаточно изменить работу с `now`, исходя из того, что `DateFormatter` безопасно изменять из нескольких задач без внешней синхронизации.
Для календарного «завтра» использовать Calendar.date(byAdding:.day,value:1,to:), а интервалы секунд оставлять для физической длительности.
Вопрос 17 из 30
Как восстановить заявленный контракт с наименьшим числом новых скрытых предположений? Важно учесть: управляемость времени и региональных зависимостей.
Swift Тестирование и диагностика · фрагмент для разбора Копировать
import Foundation
func testToday21() {
let year = Calendar.current.component(.year, from: Date())
assert(year == 2026)
}
Достаточно изменить работу с `testToday21`, исходя из того, что `Double.init` разбирает строку с учётом текущей локали.
Сигнатуру можно не менять, если считать, что `DateFormatter` безопасно изменять из нескольких задач без внешней синхронизации.
Исправление — оставить контракт прежним и учитывать, что `Date` хранит календарь и часовой пояс, использованные при создании.
Нужно адаптировать только вызов `testToday21`, поскольку `String.count` считает байты UTF-8, а не пользовательские символы.
Внедрить источник времени и Calendar, использовать фиксированные даты вокруг полуночи, високосного дня и перехода DST.