Array {

Такой синтаксис требует пользовательского result builder и инициализатора Array. Обычный Array сам по себе не собирает выражения и if из замыкания.

Короткий ответ

Что ответить на собеседовании

Такой синтаксис требует пользовательского result builder и инициализатора Array. Обычный Array сам по себе не собирает выражения и if из замыкания.

Подробный разбор

Ответ с пояснениями

Условие

Array { value1 value2

if condition { value3 } }

Ответ

Такой синтаксис требует пользовательского result builder и инициализатора Array. Обычный Array сам по себе не собирает выражения и if из замыкания.

Минимальный DSL:

@resultBuilder
enum ArrayBuilder<Element> {
    static func buildExpression(_ value: Element) -> [Element] { [value] }
    static func buildBlock(_ parts: [Element]...) -> [Element] {
        parts.flatMap { $0 }
    }
    static func buildOptional(_ part: [Element]?) -> [Element] { part ?? [] }
}
extension Array {
    init(@ArrayBuilder<Element> _ build: () -> [Element]) {
        self = build()
    }
}

let condition = true
let values: [Int] = Array {
    1
    2
    if condition { 3 }
}

Результат [1, 2, 3], при false — [1, 2]. buildOptional поддерживает if без else; для if/else нужны buildEither, для циклов — buildArray. Это собственное расширение, не встроенная возможность любого замыкания.

Источник: raw.githubusercontent.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее