На каком этапе Swift выбирает наиболее специализированную generic-перегрузку, если подходят несколько ограничений протоколами?
База Hintsage
Программирование Swift
Язык Swift и разработка приложений в экосистеме Apple.
Темы раздела
Выберите подраздел
- 0 вопросов
Общие вопросы
Смешанные вопросы по Swift.
Открыть раздел - 50 вопросов
Swift Core
Типы, функции, структуры, классы и базовая семантика.
Открыть раздел - 49 вопросов
Optionals и система типов
Optionals, value/reference semantics, casting и pattern matching.
Открыть раздел - 50 вопросов
Протоколы и generics
Protocols, extensions, associated types и generic constraints.
Открыть раздел - 50 вопросов
Коллекции и функциональный стиль
Collections, closures, map/filter/reduce и sequences.
Открыть раздел - 50 вопросов
ARC и память
ARC, reference cycles, weak/unowned и время жизни объектов.
Открыть раздел - 50 вопросов
Конкурентность
async/await, actors, tasks и безопасность данных.
Открыть раздел - 2 вопроса
Обработка ошибок
throws, Result, defer и моделирование ошибок.
Открыть раздел
Практика
Вопросы: Программирование Swift
В коде нужно передать значение any Sequence в generic-функцию. Объясните, почему вызов total допустим, несмотря на наличие associated type Element.
func total<S: Sequence>(_ sequence: S) -> Int {
sequence.reduce(0) { result, _ in result + 1 }
}
let values: any Sequence = [10, 20, 30]
let count = total(values)
Допустим, нужно хранить в одной коллекции разные реализации протокола с associated type. Как type erasure решает эту задачу?
Проведите границу: делает ли ограничение в where расширения протокола обязательным условием соответствия этому протоколу?
Сравните ограничение generic-параметра соответствием протоколу с ограничением его равенством конкретному типу: как каждое влияет на допустимые аргументы и доступные операции?
В чём принципиальное отличие generic-параметра протокола от associated type, если каждый из них связывает протокол с типом?
Как работает значение по умолчанию для associated type, если соответствующий тип можно вывести из реализации протокола?
Может ли тип, соответствующий родительскому протоколу, автоматически считаться соответствующим протоколу, который его расширяет?
Когда в протоколе следует выбрать associated type вместо generic-параметра метода для типа, связанного с конкретной реализацией?
Что произойдёт, если для одного generic-типа объявить две условные конформности к одному протоколу с разными ограничениями?
Сравните ограничения на типы коллекций: почему вызов этой функции допустим для Array и Set, хотя сами типы коллекций различаются?
func combined<A: Collection, B: Collection>(
_ first: A,
_ second: B
) -> [A.Element]
where A.Element == B.Element {
Array(first) + Array(second)
}
let result = combined([1, 2], Set([3, 4]))
Представьте generic-функцию с двумя параметрами, каждый из которых ограничен протоколом Equatable. Может ли она напрямую сравнить эти параметры?
Почему расширение типа в Swift не может добавить ему сохранённое свойство?
Объясните механизм: как уточнение ограничения associated type в дочернем протоколе меняет требования к соответствующему типу?
Объясните механизм: почему функция с opaque-результатом some обязана возвращать один конкретный тип, хотя он скрыт за протоколом?
Зачем протоколу связывать два associated type через same-type constraint, если оба уже ограничены одним протоколом?
Как ограничение associated type протокола позволяет generic-коду использовать возможности этого типа без дополнительного ограничения?
При каких условиях метод из ограниченного расширения протокола становится доступен через generic-параметр?
Как Swift выводит associated type, если соответствующий typealias не объявлен явно?
В практической ситуации обобщённый контейнер должен соответствовать протоколу только при выполнении ограничения для его параметра типа. Как Swift определяет доступность такого соответствия?
Показано 181–200 из 301