На этой лекции мы познакомимся с языком Swift, обсудим его базовые и специфические конструкции. После просмотра и проработки этого материала вы сможете разрабатывать на Swift небольшие приложения для iOS.
1) 13:45 ничего не упразднено. Оператор называется stride for i in stride(from: 10, to: 0, by: -1) { print(i) } Распечатает числа от 10 до 1 включительно 2) class модификатор может работать только на вычислимых свойствах и функциях. Ещё модификатор class может быть объявлен только у классов. А static и у структур и у классов. 3) В convenience init нельзя дёргать родительский super.init. Обязательно надо дёргать designated init своего класс. (Это и логично. Представьте, что у наследуемого класса объявляется дополнительное хранимое свойство. Если бы можно было дёргать super.init, то это свойство оставалось бы не инициализированным, то есть там не понятно, что лежало бы). 4) 40:16 COW(Copy-on-write) не для всех структур работает, а только для тех, которым прописали такой поведение. Из стандартной библиотеки COW реализован у коллекций. Если вы пишете свою стуктуру, то у неё нет никакого COW. Чтобы реализовать COW для своей стукрутуры - смотрите доку на сайте apple "isKnownUniquelyReferenced" 5) 49:02 "Самый простой цикл состоит из двух объектов" - не правда, самый просто reference cycle состоит из одного объекта. Вот пример: class RecursiveRef { var ref: RecursiveRef? deinit { print("deinit") // Никогда не распечатается, т.к. объект держит сам себя (смотри функцию main). Если сделаем "var ref: RecursiveRef?", то тогда распечатается. } } func main() { let ref = RecursiveRef() ref.ref = ref } main() 6) 50:25 Счётчиков ссылок 3 (strong, unowned, weak). Изначально объект создаётся без weak ссылок, то есть у него только strong и unowned (причём лежат они в 64 битной целом числе). Когда на объект начинает указывать weak ссылка, в рантайме, создаётся side table, в которой уже есть 3 вида счётчиков (strong, unowned, weak), значения счётчиков strong и unowend копируются в side-table, а та область памяти, которая указывала на strong + unowned, начинает указаывать на side-table. Подробнее смотри в гугле "swift/RefCount.h" Release у пропертей нашего объекта и deinit нашего объекта, вызвается, когда счётчик strong ссылок становится равен 0. Низкоуровневый C++ класс HeapObject нашего объекта (по-сути это c++ класс обёртка над любым swift классом), уничтожается только тогда, когда счётчик unowned ссылок == 0.
А каким образом в лекции, где только разжевывали как работает let и var, внезапно ДЗ на парс JSON’ов через extension для FileCache?) Я че-т офигел от такого скачка)
38:58 Не является ли это утверждение слишком большим упрощением? Ладно что компилятор может убрать аллокацию чего бы то ни было. Так же комплятор может разместить класс на стеке, если он не выйдет за пределы метода. Но вот структуру, являющуюся полем класса или захваченной замыканием, просто невозможно разместить на стеке