SW Swift  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Property wrappers

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 25 вопросов, на работу отведено 70 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 5 тематических шкал и подробные объяснения.
Вопрос 1 из 25
Определите не предполагаемое, а фактическое поведение примера «Основное значение wrappedValue». Важно учесть: преобразование доступа к свойству.
SwiftОсновное значение wrappedValue · фрагмент для разбора
@propertyWrapper struct Clamped19 {
    private var value: Int
    var wrappedValue: Int {
        get { value }
        set { value = min(max(newValue, 0), 100) }
    }
    init(wrappedValue: Int) { value = min(max(wrappedValue, 0), 100) }
}
struct Score19 { @Clamped19 var value = 120 }
print(Score19().value)
Вопрос 2 из 25
Не запуская код, восстановите состояние значений после последней строки. Какой вывод верен для «Проецируемое значение projectedValue»? Проверяется синтез и назначение projectedValue.
SwiftПроецируемое значение projectedValue · фрагмент для разбора
@propertyWrapper struct Logged19<T> {
    var wrappedValue: T
    var projectedValue: String { "value=\(wrappedValue)" }
}
struct M19 { @Logged19 var count = 3 }
print(M19().$count)
Вопрос 3 из 25
Определите не предполагаемое, а фактическое поведение примера «Обёртки состояния». Сосредоточьтесь на следующем: скрытая модель хранения и её последствия.
SwiftОбёртки состояния · фрагмент для разбора
@propertyWrapper struct Boxed19<T> {
    final class Storage { var value: T; init(_ v: T) { value = v } }
    private var storage: Storage
    var wrappedValue: T { get { storage.value } set { storage.value = newValue } }
    init(wrappedValue: T) { storage = Storage(wrappedValue) }
}
Вопрос 4 из 25
Что увидит разработчик после выполнения этого примера по теме «Проектирование API»? Проверяется граница между удобным синтаксисом и прозрачным контрактом отказа.
SwiftПроектирование API · фрагмент для разбора
@propertyWrapper struct NonEmpty19 {
    private var value: String
    var wrappedValue: String {
        get { value }
        set { precondition(!newValue.isEmpty); value = newValue }
    }
    init(wrappedValue: String) { precondition(!wrappedValue.isEmpty); value = wrappedValue }
}
Вопрос 5 из 25
Что увидит разработчик после выполнения этого примера по теме «Проверка обёрток и скрытого хранилища»? Сосредоточьтесь на следующем: наблюдаемое поведение скрытого хранилища.
SwiftТестирование и диагностика · фрагмент для разбора
@propertyWrapper struct CountWrites19<T> {
    var wrappedValue: T { didSet { writes += 1 } }
    private(set) var writes = 0
    var projectedValue: Int { writes }
}
struct Model19 { @CountWrites19 var value = 0 }
var model19 = Model19(); model19.value = 1
print(model19.$value)
Вопрос 6 из 25
Разработчик видит симптом, но ищет первопричину. Какое объяснение выдерживает проверку кодом? Важно учесть: преобразование доступа к свойству.
SwiftОсновное значение wrappedValue · фрагмент для разбора
@propertyWrapper struct ReadOnly19 {
    let wrappedValue: Int
}
struct S19 { @ReadOnly19 var value = 1 }
var s19 = S19()
s19.value = 2
Вопрос 7 из 25
Какую причину стоит указать в отчёте об ошибке, прежде чем предлагать исправление? Важно учесть: синтез и назначение projectedValue.
SwiftПроецируемое значение projectedValue · фрагмент для разбора
@propertyWrapper struct W19 { var wrappedValue: Int }
struct M219 { @W19 var value = 1 }
let m = M219()
print(m.$value)
Вопрос 8 из 25
Что в этом фрагменте нужно объяснить первым, чтобы дальнейшая правка не оказалась случайной? Важно учесть: скрытая модель хранения и её последствия.
SwiftОбёртки состояния · фрагмент для разбора
@propertyWrapper
struct Boxed19<T> {
    final class Storage {
        var value: T
        init(_ value: T) { self.value = value }
    }
    private var storage: Storage
    var wrappedValue: T {
        get { storage.value }
        set { storage.value = newValue }
    }
    init(wrappedValue: T) { storage = Storage(wrappedValue) }
}

struct Settings19 { @Boxed19 var flag = false }
var first19 = Settings19()
var second19 = first19
second19.flag = true
print(first19.flag)
Вопрос 9 из 25
Разработчик видит симптом, но ищет первопричину. Какое объяснение выдерживает проверку кодом? Сосредоточьтесь на следующем: граница между удобным синтаксисом и прозрачным контрактом отказа.
SwiftПроектирование API · фрагмент для разбора
@propertyWrapper
struct NonEmpty19 {
    private var value: String
    var wrappedValue: String {
        get { value }
        set {
            precondition(!newValue.isEmpty)
            value = newValue
        }
    }
    init(wrappedValue: String) {
        precondition(!wrappedValue.isEmpty)
        value = wrappedValue
    }
}

struct User19 { @NonEmpty19 var name = "" }
_ = User19()
Вопрос 10 из 25
Какой разбор отличает реальную причину от сопутствующего риска? Сосредоточьтесь на следующем: наблюдаемое поведение скрытого хранилища.
SwiftТестирование и диагностика · фрагмент для разбора
@propertyWrapper
struct CountWrites19<T> {
    var wrappedValue: T { didSet { writes += 1 } }
    private(set) var writes = 0
    var projectedValue: Int { writes }
}

struct Model19 { @CountWrites19 var value = 0 }

func testWrapper19() {
    let model = Model19()
    _ = model.value
    assert(model.$value == 1)
}
Вопрос 11 из 25
Какое решение одновременно исправляет код и оставляет понятную границу для дальнейших изменений? Проверяется преобразование доступа к свойству.
SwiftОсновное значение wrappedValue · фрагмент для разбора
@propertyWrapper struct ReadOnly19 {
    let wrappedValue: Int
}
struct S19 { @ReadOnly19 var value = 1 }
var s19 = S19()
s19.value = 2
Вопрос 12 из 25
Как восстановить заявленный контракт с наименьшим числом новых скрытых предположений? Здесь оценивается синтез и назначение projectedValue.
SwiftПроецируемое значение projectedValue · фрагмент для разбора
@propertyWrapper struct W19 { var wrappedValue: Int }
struct M219 { @W19 var value = 1 }
let m = M219()
print(m.$value)
Вопрос 13 из 25
Что нужно поменять в реализации или сигнатуре, чтобы отрицательный сценарий стал корректным? Не упускайте из виду следующее: скрытая модель хранения и её последствия.
SwiftОбёртки состояния · фрагмент для разбора
@propertyWrapper
struct Boxed19<T> {
    final class Storage {
        var value: T
        init(_ value: T) { self.value = value }
    }
    private var storage: Storage
    var wrappedValue: T {
        get { storage.value }
        set { storage.value = newValue }
    }
    init(wrappedValue: T) { storage = Storage(wrappedValue) }
}

struct Settings19 { @Boxed19 var flag = false }
var first19 = Settings19()
var second19 = first19
second19.flag = true
print(first19.flag)
Вопрос 14 из 25
Какой вариант ремонта вы бы приняли после содержательной проверки кода? Проверяется граница между удобным синтаксисом и прозрачным контрактом отказа.
SwiftПроектирование API · фрагмент для разбора
@propertyWrapper
struct NonEmpty19 {
    private var value: String
    var wrappedValue: String {
        get { value }
        set {
            precondition(!newValue.isEmpty)
            value = newValue
        }
    }
    init(wrappedValue: String) {
        precondition(!wrappedValue.isEmpty)
        value = wrappedValue
    }
}

struct User19 { @NonEmpty19 var name = "" }
_ = User19()
Вопрос 15 из 25
Какая правка делает намерение кода явным и проверяемым? Сосредоточьтесь на следующем: наблюдаемое поведение скрытого хранилища.
SwiftТестирование и диагностика · фрагмент для разбора
@propertyWrapper
struct CountWrites19<T> {
    var wrappedValue: T { didSet { writes += 1 } }
    private(set) var writes = 0
    var projectedValue: Int { writes }
}

struct Model19 { @CountWrites19 var value = 0 }

func testWrapper19() {
    let model = Model19()
    _ = model.value
    assert(model.$value == 1)
}
Вопрос 16 из 25
Какой пограничный случай способен изменить вывод, хотя синтаксис останется почти тем же? Сосредоточьтесь на следующем: преобразование доступа к свойству.
Вопрос 17 из 25
Какой отрицательный сценарий лучше всего проверяет предел применимости этого механизма? Проверяется синтез и назначение projectedValue.
Вопрос 18 из 25
Какое ограничение темы «Обёртки состояния» обязательно проверить отдельным граничным тестом? Сосредоточьтесь на следующем: скрытая модель хранения и её последствия.
Вопрос 19 из 25
Что нужно учесть, прежде чем объявлять найденное правило универсальным? Проверяется граница между удобным синтаксисом и прозрачным контрактом отказа.
Вопрос 20 из 25
Какую предпосылку стоит явно записать в документации и тестах? Важно учесть: наблюдаемое поведение скрытого хранилища.
Вопрос 21 из 25
Какой принцип важнее локальной красоты синтаксиса в рабочем приложении? Важно учесть: преобразование доступа к свойству.
Вопрос 22 из 25
Какое решение уменьшит число скрытых состояний и упростит расследование следующего сбоя? Не упускайте из виду следующее: синтез и назначение projectedValue.
Вопрос 23 из 25
Какое замечание на проверке кода поможет предотвратить повторение такого дефекта? Здесь оценивается скрытая модель хранения и её последствия.
Вопрос 24 из 25
Какой принцип важнее локальной красоты синтаксиса в рабочем приложении? Важно учесть: граница между удобным синтаксисом и прозрачным контрактом отказа.
Вопрос 25 из 25
Какое замечание на проверке кода поможет предотвратить повторение такого дефекта? Проверяется наблюдаемое поведение скрытого хранилища.

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

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

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

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