0Pricing
Swift Academy · Урок

Условия where в расширениях

Используйте where в расширениях типов и протоколов , чтобы добавлять API только при выполнении ограничений (например, Array where Element: Equatable , Collection where Element == Int ).

«Условия where в расширениях» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.

Зачем нужны расширения с ограничениями?

Добавляйте интерфейсы только при выполнении ограничений типов, задавая условия в расширениях:

  • расширения типов (например, Array);
  • расширения протоколов (например, Collection);
  • ограничения на точное совпадение (например, Element == Int).

Расширение типа с ограничением

Добавляйте методы к массиву только когда его Element поддерживает сопоставимость. Массивы с несопоставимыми элементами не будут видеть эти интерфейсы.

extension Array where Element: Equatable {
    func removing(_ value: Element) -> [Element] {
        filter { $0 != value }
    }
    func containsAll(_ others: [Element]) -> Bool {
        others.allSatisfy(self.contains)
    }
}
print([1,2,3].removing(2))        // [1,3]
print(["a","b"].containsAll(["b"])) // true

Расширение протокола с условием

Расширение протокола добавляет интерфейс ко всем соответствующим типам, когда выполняется ограничение (здесь — к любой Collection с элементами, поддерживающими сравнимость).

extension Collection where Element: Comparable {
    var isSorted: Bool {
        // Pair each element with the next; ensure non-decreasing order
        zip(self, dropFirst()).allSatisfy(<=)
    }
}
print([1,2,3].isSorted)     // true
print([3,1,2].isSorted)     // false

Ограничения на точное совпадение

Используйте ограничения равенства для целевых интерфейсов, например только при условии Element == Int. Для других типов элементов они недоступны.

extension Collection where Element == Int {
    var sum: Int { reduce(0, +) }
    func average() -> Double {
        isEmpty ? 0 : Double(sum) / Double(count)
    }
}
print([1,2,3].sum)          // 6
print([1,2,3].average())    // 2.0

Интерфейсы на основе возможностей

Задавайте ограничения по возможности (протоколам вроде Numeric и Hashable), чтобы составлять мощные повторно используемые вспомогательные средства.

extension Collection where Element: Numeric {
    var total: Element { reduce(0, +) }
}
extension Sequence where Element: Hashable {
    var uniques: [Element] {
        var seen = Set<Element>()
        return filter { seen.insert($0).inserted }
    }
}
print([1,2,2,3].uniques)    // [1,2,3]
print([1,2,3].total)        // 6

Примечания по проектированию

Советы:

  • Отдавайте предпочтение минимальным ограничениям для более широкого повторного использования.
  • Избегайте пересекающихся расширений, определяющих один и тот же член: это может запутать разрешение перегрузки.
  • Документируйте предположения (порядок, уникальность, числовые области).

Назначение расширений с ограничениями

Быстрая проверка: что позволяют делать расширения с ограничениями?

Итоги

Итоги: используйте where в расширениях типов и протоколов, чтобы точно нацеливать программные интерфейсы — по возможностям (: Comparable) или точному типу (== Int), сохраняя код безопасным и понятным.

Часто задаваемые вопросы

Урок «Условия where в расширениях» бесплатный?

Да — полный текст урока «Условия where в расширениях» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.

Чему я научусь в уроке «Условия where в расширениях»?

Используйте where в расширениях типов и протоколов , чтобы добавлять API только при выполнении ограничений (например, Array where Element: Equatable , Collection where Element == Int ). Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Условия where в расширениях»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Условное соответствие протоколам
  2. Рекурсивные ограничения и обобщения высшего порядка
  3. Условия where в расширениях
← Назад к Swift Academy