Your AI powered learning assistant

Неочевидные аспекты Swift и магия, стоящая за ними - Павел Лопушинский - Герои Swift 2022

Совместимость между Swift и Objective-C В этой главе мы исследуем взаимодействие между Swift и Objective-C. Мы узнаем, что в Objective-C все наследуется от NSObject, в то время как в Swift нет базового типа. Мы также обнаруживаем, что мы можем использовать тип `id` в Objective-C для хранения чего угодно, тогда как в Swift у нас есть две возможности: `Any`, который может содержать любой тип, включая структуры и замыкания; и `AnyObject`, который предназначен только для типов классов. Кроме того, мы обнаруживаем, что некоторые типы swift, такие как строки или массивы, могут быть объединены в соответствующие им аналоги objective-c.

Аннотация "Автоматическое закрытие" Эта глава посвящена аннотации "автоматическое закрытие" в Swift. Автоматическое закрытие автоматически преобразует выражение в замыкание перед его вычислением. Такое поведение может быть не сразу очевидным, поскольку большинство из нас ожидают, что методы будут вызываться немедленно при вызове. Аннотация автоматического закрытия нарушает это предположение, заключая выражения в замыкание без явного указания во время автозавершения.

"Цикл автоматического удержания закрытия" В этой заключительной главе, посвященной автоматическим замыканиям, мы обсудим, как они могут привести к циклам сохранения, если не использовать их осторожно.В частности, неявный захват self внутри автоматического закрытия приводит к сильному циклу ссылок.Мы демонстрируем, как происходят такие циклы сохранения, и предлагаем решение с использованием слабого списка захвата

Автоклавы и циклы выдержки При использовании автозакрытий заданное в нем замыкание слабо фиксирует само себя, как и предполагалось. Однако сгенерированное автоматическое закрытие неявно сильно фиксирует само себя. Чтобы разорвать этот цикл сохранения, нам нужно извлечь наше замыкание за пределы выражения автоматического закрытия.

Значения по умолчанию в объявлениях функций "Значения по умолчанию" позволяют нам указывать аргумент по умолчанию в объявлениях функций. Мы можем создать подкласс класса с переопределенной реализацией, которая включает новое значение по умолчанию для одного из его методов.

Расширения протоколов и перегрузка свойств В Swift расширения протокола позволяют нам предоставлять реализации по умолчанию для требований. При доступе к свойствам из соответствующих типов с различной информацией об их типе (статический или динамический) Swift выбирает либо необязательное, либо необязательное свойство на основе статического типа, известного во время компиляции.