Общие вопросы
Смешанные вопросы по 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-параметр, откуда берётся конкретная реализация?
Разберите последствие наследования соответствия: почему Child не может получить отдельное соответствие Identified с другим associatedtype?
protocol Identified {
associatedtype ID: Hashable
var id: ID { get }
}
class Base: Identified {
let id: Int
init(id: Int) { self.id = id }
}
class Child: Base { }
extension Child: Identified {
typealias ID = String
var id: String { "child" }
}
Чем отличается ограничение associated type через AnyObject от ограничения самого протокола через AnyObject?
В структуре метод протокола изменяет её состояние. Почему требование должно быть помечено mutating, даже если реализация класса не меняет ссылку?
Как generic-код доказывает, что associated type параметра поддерживает дополнительный протокол?
Рассмотрите рекурсивный протокол для узлов дерева: каким образом ограничение associated type тем же протоколом позволяет generic-коду обходить дочерние узлы без type erasure?
Что гарантирует требование базового класса в объявлении протокола?
Тип соответствует двум протоколам с одноимёнными associated type. Как Swift различает эти требования?
Что мешает протоколу наследоваться от конкретной специализации протокола с primary associated type?
Что изменится в моменте выполнения преобразований, если цепочку map и filter сделать lazy?
Можно ли в Swift гарантировать повторный обход любого значения типа Sequence?
Сравните порядок map→filter и filter→map: при каком условии результат не изменится?
Как Swift управляет временем жизни переменной, захваченной escaping-замыканием?
В Swift две переменные содержат один Array: что происходит с памятью при изменении одной из них?
Как порядок элементов Sequence влияет на результат reduce при неассоциативной операции?
Разберите, почему map у Dictionary в Swift возвращает массив, а не Dictionary.
В какой ситуации для построения коллекции стоит выбрать reduce(into:) вместо reduce?
Объясните механизм: чем захват переменной через список захвата отличается от обычного захвата, если значение изменилось после создания замыкания?
Разберите ошибку эксклюзивного доступа в Swift: почему этот код нельзя безопасно скомпилировать и как изменить его, сохранив результат?
Вам нужно пропустить обработку одного элемента при обходе массива. Какой вывод даст код и что именно прекращает return внутри замыкания?
let numbers = [1, 2, 3, 4]
numbers.forEach { number in
if number == 3 {
return
}
print(number)
}
print("готово")
Показано 141–160 из 651