All streams
Search
Write a publication
Pull to refresh
7
0

iOS-Школота

Send message

Спасибо за статью.
Скачал приложение из стора специально, чтобы проверит ваш виджет. Прошел эти 100500 шагов регистрации, а вместо виджета болт. Как добавить его? Или это статья о том как мы сделали виджет у себя на симуляторе и в релиз вообще он не пойдет?

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

C протоколом не получается реализовать. У нас есть свойства next и previous, которые протоколом можно закрыть, но что делать с дженерик свойством value? Если мы добавим ассоциативный тип к протоколу и пропишем условно
" var value: T { get }"
то получившийся протокол мы как тип использовать не сможем. Не параметром передать ни рекурсивно сослаться.
Диванные эксперты без пруфов утверждают, что реализовывать необходимо через inderect enum, забывая про его value-type природу. Даже если чудом реализовать через inderect enum, то мы получаем сложность О(n) на любые операции добавления/удаления элемента в список. Класс-контейнер даёт нам O(1) практически на все операции, если нет необходимости копировать структуру.

Могли бы не занудствовать, а сообщить о всех опечатках через Ctrl+Enter. Раз вы так переживаете за орфографию.

Есть пруф «правильной реализации»? Охотно ознакомлюсь.
Контейнеры должны ссылаться друг на друга, а не копировать значения. Value Type для контейнера не подходит. Вот здесь можно ознакомиться более детально, правда на заморском языке.
Пока перенесу Node класс в файл к LinkedList и закрою все сеттеры fileprivate доступом.
Умные вещи говорите. Решая проблему, которая ломала реализацию списка в книге за 60$, я и не мог подумать, что решение может быть таким простым. Снимаю шляпу перед вашей внимательностью. Это я про ссылку на пустой приватный класс вместо ссылки на первый контейнер.
Может быть посоветуете как можно элегантно закрыть доступ к модификации содержимого контейнеров, но так чтобы внутри класса LinkedList логика не изменилась? Всем классом сидим голову ломаем и никаких результатов.
  1. Я ждал вопроса «почему яндекс?!». Выбор пал на эти компании, потому что они известны своими «сложными» и долгими отборочными этапами. Разговоры о престижности и тд это все очень субъективно.
  2. «Так себе перспективы» это не всегда о компании в целом. Даже в яндексе найдутся команды, где работать скучно и платят меньше.
  3. То-то и оно! Если у Вас в сторе 20 проектов, 5 лет опыта работы над проектами с многомиллионной аудиторией, а у Вас спрашивают вопросы для отсева полных новичков, то тут два варианта. Первый — вам не верят, второй — вас собеседуют по вопросам из интернета.
  4. Про if и guard это все субъективная вкусовщина.
Спасибо за замечание о сложности операций. Copy-on-write я реализовывал в последнюю очередь и забыл оставить пометку об изменениях.

По поводу необходимости копирования: если на первый контейнер нашего списка ссылается кто-то еще (копии нашей структуры), то нам необходимо создать новый экземпляр списка и работать с ним иначе изменения нашего списка отразятся на всех его копиях. Контейнеры же ссылочный тип.

Сразу двойной связанный список, потому что мы здесь не в игрушки играемся! Простых примеров в интернете полно.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity