SW Swift  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Протоколы и расширения

Проверяет основу темы «Протоколы и расширения» через чтение кода, предсказание результата и выбор корректной конструкции. Вопросы требуют не только узнать конструкцию, но и проследить выполнение, найти причину дефекта, выбрать исправление и оценить пограничный сценарий. Языковые примеры рассчитаны на Swift 6; задания с Apple SDK рассматриваются в контексте современных платформенных контрактов.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 20 вопросов, на работу отведено 55 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 4 тематические шкалы и подробные объяснения.
Вопрос 1 из 20
Не запуская код, восстановите состояние значений после последней строки. Какой вывод верен для «Протоколы»? Не упускайте из виду следующее: соответствие требованиям свойств и методов.
SwiftПротоколы · фрагмент для разбора
protocol Named { var name: String { get } }
struct User: Named { let name: String }
func printName(_ value: any Named) { print(value.name) }
printName(User(name: "Ada"))
Вопрос 2 из 20
Какой итог даст показанный фрагмент, если применять правила Swift буквально, а не угадывать намерение автора? Важно учесть: поведение, которое можно добавить без изменения исходного объявления.
SwiftРасширения · фрагмент для разбора
extension Int {
    var squared: Int { self * self }
}
print(4.squared)
Вопрос 3 из 20
В этом примере важна одна точная деталь механизма «Реализации по умолчанию». Что действительно произойдёт? Сосредоточьтесь на следующем: тонкая граница статической и динамической диспетчеризации.
SwiftРеализации по умолчанию · фрагмент для разбора
protocol Greeter { func greet() -> String }
extension Greeter { func greet() -> String { "default" } }
struct Person: Greeter {}
print(Person().greet())
Вопрос 4 из 20
В этом примере важна одна точная деталь механизма «Композиция протоколов». Что действительно произойдёт? Сосредоточьтесь на следующем: объединение требований и классовое ограничение.
SwiftКомпозиция протоколов · фрагмент для разбора
protocol Readable { func read() -> String }
protocol Writable { func write(_ text: String) }
func sync(_ value: any Readable & Writable) { value.write(value.read()) }
Вопрос 5 из 20
Разработчик видит симптом, но ищет первопричину. Какое объяснение выдерживает проверку кодом? Важно учесть: соответствие требованиям свойств и методов.
SwiftПротоколы · фрагмент для разбора
protocol Resettable { mutating func reset() }
struct Counter: Resettable {
    var value = 0
    func reset() { value = 0 }
}
Вопрос 6 из 20
Что в этом фрагменте нужно объяснить первым, чтобы дальнейшая правка не оказалась случайной? Здесь оценивается поведение, которое можно добавить без изменения исходного объявления.
SwiftРасширения · фрагмент для разбора
extension String {
    var cachedLength = 0
}
Вопрос 7 из 20
Разработчик видит симптом, но ищет первопричину. Какое объяснение выдерживает проверку кодом? Здесь оценивается тонкая граница статической и динамической диспетчеризации.
SwiftРеализации по умолчанию · фрагмент для разбора
protocol P {}
extension P { func value() -> String { "extension" } }
struct S: P { func value() -> String { "struct" } }
let x: any P = S()
print(x.value())
Вопрос 8 из 20
Ожидаемое поведение не совпало с фактическим. В чём первая нарушенная гарантия? Не упускайте из виду следующее: объединение требований и классовое ограничение.
SwiftКомпозиция протоколов · фрагмент для разбора
protocol A: AnyObject {}
struct Value: A {}
Вопрос 9 из 20
Что следует изменить, чтобы исправить первопричину, а не подогнать ожидаемый результат? Не упускайте из виду следующее: соответствие требованиям свойств и методов.
SwiftПротоколы · фрагмент для разбора
protocol Resettable { mutating func reset() }
struct Counter: Resettable {
    var value = 0
    func reset() { value = 0 }
}
Вопрос 10 из 20
Какой вариант ремонта вы бы приняли после содержательной проверки кода? Здесь оценивается поведение, которое можно добавить без изменения исходного объявления.
SwiftРасширения · фрагмент для разбора
extension String {
    var cachedLength = 0
}
Вопрос 11 из 20
Как восстановить заявленный контракт с наименьшим числом новых скрытых предположений? Здесь оценивается тонкая граница статической и динамической диспетчеризации.
SwiftРеализации по умолчанию · фрагмент для разбора
protocol P {}
extension P { func value() -> String { "extension" } }
struct S: P { func value() -> String { "struct" } }
let x: any P = S()
print(x.value())
Вопрос 12 из 20
Какая правка решает проблему на том уровне, где она возникла? Не упускайте из виду следующее: объединение требований и классовое ограничение.
SwiftКомпозиция протоколов · фрагмент для разбора
protocol A: AnyObject {}
struct Value: A {}
Вопрос 13 из 20
Какую предпосылку стоит явно записать в документации и тестах? Важно учесть: соответствие требованиям свойств и методов.
Вопрос 14 из 20
Какое ограничение темы «Расширения» обязательно проверить отдельным граничным тестом? Проверяется поведение, которое можно добавить без изменения исходного объявления.
Вопрос 15 из 20
Какое ограничение темы «Реализации по умолчанию» обязательно проверить отдельным граничным тестом? Проверяется тонкая граница статической и динамической диспетчеризации.
Вопрос 16 из 20
Какое уточнение защищает решение от слишком широкого толкования? Важно учесть: объединение требований и классовое ограничение.
Вопрос 17 из 20
Какой принцип важнее локальной красоты синтаксиса в рабочем приложении? Не упускайте из виду следующее: соответствие требованиям свойств и методов.
Вопрос 18 из 20
Какой принцип важнее локальной красоты синтаксиса в рабочем приложении? Сосредоточьтесь на следующем: поведение, которое можно добавить без изменения исходного объявления.
Вопрос 19 из 20
Что стоит закрепить в типах или API, а не оставлять устной договорённостью? Здесь оценивается тонкая граница статической и динамической диспетчеризации.
Вопрос 20 из 20
Какой инженерный принцип лучше всего подходит для долгосрочного сопровождения части «Композиция протоколов»? Сосредоточьтесь на следующем: объединение требований и классовое ограничение.

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу