Общие вопросы
Смешанные вопросы по Swift.
Открыть разделБаза Hintsage
Язык Swift и разработка приложений в экосистеме Apple.
Темы раздела
Смешанные вопросы по Swift.
Открыть разделТипы, функции, структуры, классы и базовая семантика.
Открыть разделOptionals, value/reference semantics, casting и pattern matching.
Открыть разделProtocols, extensions, associated types и generic constraints.
Открыть разделCollections, closures, map/filter/reduce и sequences.
Открыть разделARC, reference cycles, weak/unowned и время жизни объектов.
Открыть разделasync/await, actors, tasks и безопасность данных.
Открыть разделthrows, Result, defer и моделирование ошибок.
Открыть разделПрактика
Разберите, почему реализация метода из расширения протокола может вызываться в generic-функции, несмотря на одноимённый метод конкретного типа.
В практической ситуации обобщённый контейнер должен соответствовать протоколу только при выполнении ограничения для его параметра типа. Как Swift определяет доступность такого соответствия?
Как Swift выводит associated type, если соответствующий typealias не объявлен явно?
При каких условиях метод из ограниченного расширения протокола становится доступен через generic-параметр?
Как ограничение associated type протокола позволяет generic-коду использовать возможности этого типа без дополнительного ограничения?
Зачем протоколу связывать два associated type через same-type constraint, если оба уже ограничены одним протоколом?
Объясните механизм: почему функция с opaque-результатом some обязана возвращать один конкретный тип, хотя он скрыт за протоколом?
Объясните механизм: как уточнение ограничения associated type в дочернем протоколе меняет требования к соответствующему типу?
Почему расширение типа в Swift не может добавить ему сохранённое свойство?
Представьте generic-функцию с двумя параметрами, каждый из которых ограничен протоколом Equatable. Может ли она напрямую сравнить эти параметры?
Сравните ограничения на типы коллекций: почему вызов этой функции допустим для 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-типа объявить две условные конформности к одному протоколу с разными ограничениями?
Когда в протоколе следует выбрать associated type вместо generic-параметра метода для типа, связанного с конкретной реализацией?
Может ли тип, соответствующий родительскому протоколу, автоматически считаться соответствующим протоколу, который его расширяет?
Как работает значение по умолчанию для associated type, если соответствующий тип можно вывести из реализации протокола?
В чём принципиальное отличие generic-параметра протокола от associated type, если каждый из них связывает протокол с типом?
Сравните ограничение generic-параметра соответствием протоколу с ограничением его равенством конкретному типу: как каждое влияет на допустимые аргументы и доступные операции?
Проведите границу: делает ли ограничение в where расширения протокола обязательным условием соответствия этому протоколу?
Допустим, нужно хранить в одной коллекции разные реализации протокола с associated type. Как type erasure решает эту задачу?
В коде нужно передать значение 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)
Показано 101–120 из 651