cookie

ما از کوکی‌ها برای بهبود تجربه مرور شما استفاده می‌کنیم. با کلیک کردن بر روی «پذیرش همه»، شما با استفاده از کوکی‌ها موافقت می‌کنید.

avatar

околоiOSный канал: cmd+B, cmd+R

iOS-разработка, мотивация, статьи, мемасики :) ___ Видео материалы, тестовые задания, информация по курсу: YouTube-channel: https://www.youtube.com/c/cmdBcmdR ___ Дополнительные материалы + поддержка YouTube/Telegram канала https://boosty.to/cmdbcmdr

نمایش بیشتر
پست‌های تبلیغاتی
877
مشترکین
+124 ساعت
+77 روز
+9430 روز
توزیع زمان ارسال

در حال بارگیری داده...

Find out who reads your channel

This graph will show you who besides your subscribers reads your channel and learn about other sources of traffic.
Views Sources
تجزیه و تحلیل انتشار
پست هابازدید ها
به اشتراک گذاشته شده
ديناميک بازديد ها
01
Media files
2253Loading...
02
Хотя, возможно, "захватывает" просто в контексте резало слух, потому что в implicit captures я также писал "захватывает по значению" 🙂 https://t.me/ioscmdbcmdr/491
2701Loading...
03
Давайте разбираться Смотрел мок-собес. Там говорили, что «for цикл захватывает массив в стек, таким образом, что он не пересчитывает внутри for цикла». Вроде бы все верно и логично, но слово «захватывает» ввело в некое заблуждение. Решил погуглить... Из документации IteratorProtocol: Whenever you use a for-in loop with an array, set, or any other collection or sequence, you’re using that type’s iterator. Swift uses a sequence’s or collection’s iterator internally to enable the for-in loop language construct. Всякий раз, когда вы используете цикл for-in с массивом, набором или любой другой коллекцией или последовательностью, вы используете итератор этого типа. Swift использует внутренний итератор последовательности или коллекции, чтобы включить языковую конструкцию цикла for-in. Также мы знаем, что массив имеет семантику value type + COW. Лезем в доку makeIterator() func makeIterator() -> IndexingIterator<Self> makeIterator возвращает IndexingIterator IndexingIterator перебирает элементы коллекции, сохраняя ее и текущий индекс итерации. Реализация. Из всего этого мы можем сделать вывод, что for-in для перебора использует копию коллекции. Значит создается 2 массива(в нашем случае) : - массив, по которому выполняется итерация - массив, в котором происходит мутация. И в теле for-in мы обращаемся именно к нему. Переходим к примеру. var array = [1, 2, 3, 4, 5] for index in array.indices { if array[index].isMultiple(of: 2) { array.remove(at: index) } print(array) } //Консоль //[1, 2, 3, 4, 5] //[1, 3, 4, 5] //[1, 3, 5] //Swift/ContiguousArrayBuffer.swift:600: Fatal error: Index out of range for-in определяет, что необходимо сделать 5 операций (индексы с 0 до 4) 1 итерация (индекс 0) «1» нечетное число, поэтому в консоли видим [1, 2, 3, 4, 5] 2 итерация (индекс 1) «2» четное, удаляем, в консоли - [1, 3, 4, 5] 3 итерация (индекс 2) Сейчас по индексу 2 находится «4» - четное - удаляем. В консоли [1, 3, 5] 4 итерация (индекс 3) Массив array на этот момент состоит из [1, 3, 5], обращаясь по индексу 3 ловим «Index out of range» Такой подход объясняет, как в одном из примеров выше получилось [1, 3, 4] Ставь лайк, если было интересно 👍 Пиши коммент, если есть что добавить/исправить 🥸
2624Loading...
04
Media files
2470Loading...
05
Если что, в 4 строке это равенство ==
2430Loading...
06
Media files
2440Loading...
07
Media files
2290Loading...
08
Media files
2300Loading...
09
Media files
2400Loading...
10
Media files
70Loading...
11
Media files
2470Loading...
12
Media files
2490Loading...
13
Можно долго спорить на тему того, все ли должен знать джун, что его спрашивают на собеседовании, а можно взять и подготовиться :) Если вы не знаете, почему у двух практически одинаковых структур разный размер, подготовил для вас пост: [27]iOS Interview: MemoryLayout П.С. Там одна подписка со скидкой осталась 😉
2931Loading...
14
Media files
2940Loading...
15
Media files
2830Loading...
16
Media files
2790Loading...
17
Для прикола прошел тест на каком-то первом попавшемся сайте :) Потратьте минуту и скиньте свои результаты :) Заодно укажите как вы печатаете. Понятно, что слова рандомятся, но хотя бы примерно :)
2852Loading...
18
Media files
2790Loading...
19
А теперь серьезный опрос :) Заметил, что я в основном печатаю 2 пальцами каждой руки (указательный + средний). Крайне редко на помощь приходит безымянный палец. А как это происходит у вас?
2811Loading...
20
Combine с нуля Познакомились с основами работы с сетью Переходим в новый раздел. По такому поводу скидка 30% на 3 подписки.
2901Loading...
21
Изменения за неделю: 1. Combine с нуля - Combine[16]: Data Task Publisher - Combine[17]: Decoding JSON - Combine[18]: Retrying Failed Requests 2. YouTube - Xcode Shorcuts 3. Перенес на boosty блок "Фундаментальные знания Swift" - Доступ к материалам и тестам - 2200 - 12 домашних заданий с видеофидбеком - 3000р - 4 персональных созвона - 3000р _ Полное содержание boosty аккаунта здесь :)
2990Loading...
22
Рассмотрим, на мой взгляд, «несерьезные» алгоритмы сортировки 🙂 1. Stalin sort/dictator sort/ trump sort Само название сортировки говорит о том, что к ней нельзя относится серьезно. Хотя на собеседованиях спрашивают про баблсорт. С таким же успехом можно спрашивать и Сталин сорт Суть сортировки достаточно проста: «Не нравится алгоритмическая секция на собеседованиях? Иди на завод». Разберем по пунктам: ⁃ Проходимся по последовательности слева направо ⁃ Если элемент больше или равен предыдущему - оставляем в списке ⁃ Если элемент меньше предыдущего - удаляем При такой сортировке сложность O(n), а то что некоторые элементы стали иноагентами это мелочь. Конечно, мы можем записать удаленные элементы в массив Мизулиной, а потом взять каждого поочередно и прогнать по такой же схеме по «отсортированному массиву». В итоге мы получим отсортированный массив, но с временной сложностью O(n^2) 2. Bogo sort Вот что говорит Википедия по поводу этой сортировки: Bogosort (от амер. комп. жарг. bogus — неработоспособный, нефункциональный, бесполезный) — неэффективный алгоритм сортировки, используемый только в образовательных целях и противопоставляемый другим, более реалистичным алгоритмам. Стало даже немного обидно за нее... Суть алгоритма: 1. Проверяем последовательность, которая пришла на вход, на «отсортированность». 2. Если последовательность отсортированная - круто! Если нет - перемешаем все элементы и возвращаемся к пункту 1 Попахивает коммивояжером с факториальной сложностью 🙂 3. Thanos sort Название интригует и сразу отправляет во вселенную Марвел. Щелчок Таноса уничтожил 50 % всех живых существ во Вселенной. Мемориалы «павшим» жертвам были воздвигнуты по всей вселенной. Процесс уничтожения половины жизни во Вселенной представлял собой полный распад существа на мельчайшие частицы, представляющие собой пыль или прах, без дальнейшего восстановления. Если у вас при виде «50%» возникли мысли о бинарном поиске, быстрой сортировке или сортировке слиянием, и вы полны надежды адекватной сортировки за O(n*log n) - забудьте… Хотя все очень похоже на быструю сортировку и сортировку слиянием Сортировка Таноса заключается в следующем: ⁃ Вычисление среднего арифметического значения среди элементов ⁃ Сравнение элементов с «опорным» элементом (значение из пункта 1). Значения меньше - влево, значения больше - вправо ⁃ Рекурсивный повтор действий для левой и правой половины последовательности Что по сложности? Повторение судьбы быстрой сортировки: худший случай - O(n^2) Пока гуглил, видел вариации сортировки Таноса через удаление половины массива, пока массив не станет отсортированный, но это уже дичайшая дичь (хотя полностью оправдывает название и суть). Пусть лучше будет через среднее арифметическое 🙂 Хотя при таком подходе быстрая сортировка и сортировка слиянием, тоже станет разновидностью сортировки Таноса. Ну а на этом все, всем хороших выходных 🙂
3195Loading...
23
Media files
3091Loading...
24
Apple список 100 лучших альбомов по версии Apple Music: 100. Body Talk — Robyn 99. Hotel California — Eagles 98. ASTROWORLD — Travis Scott 97. Rage Against the Machine — Rage Against the Machine 96. Pure Heroine — Lorde 95. Confessions — USHER 94. Untrue — Burial 93. A Seat at the Table — Solange 92. Flower Boy — Tyler, The Creator 91. Listen Without Prejudice Vol. 1 — George Michael 90. Back in Black — AC/DC 89. The Fame Monster — Lady Gaga 88. I Put a Spell on You — Nina Simone 87. Blue Lines — Massive Attack 86. My Life — Mary J. Blige 85. Golden Hour — Kacey Musgraves 84. Doggystyle — Snoop Dog 83. Horses — Patty Smith 82. Get Rich or Die Tryin’ — 50 Cent 81. After the Gold Rush — Neil Young 80. The Marshall Mathers LP — Eminem 79. Norman F*g Rockwell! — Lana Del Rey 78. Goodbye Yellow Brick Road — Elton John 77. Like a Prayer — Madonna 76. Un Verano Sin Ti — Bad Bunny 75. Supa Dupa Fly — Missy Elliott 74. The Downward Spiral — Nine Inch Nails 73. Aja — Steely Dan 72. SOS — SZA 71. Trans-Europe Express — Kraftwerk 70. Straight Outta Compton — N.W.A 69. Master of Puppets — Metallica 68. Is This It — The Strokes 67. Dummy — Portishead 66. The Queen Is Dead — The Smiths 65. 3 Feet High and Rising — De La Soul 64. Baduizm — Erykah Badu 63. Are You Experienced — The Jimi Hendrix Experience 62. All Eyez on Me — 2Pac 61. Love Deluxe — Sade 60. The Velvet Underground & Nico — The Velvet Underground & Nico 59. AM — Arctic Monkeys 58. (What’s the Story) Morning Glory? — Oasis 57. Voodoo — D’Angelo 56. Disintegration — The Cure 55. ANTI — Rihanna 54. A Love Supreme — John Coltrane 53. Exile on Main St. — The Rolling Stones 52. Appetite for Destruction — Guns N’ Roses 51. Sign O’ the Times — Prince 50. Hounds of Love — Kate Bush 49. The Joshua Tree — U2 48. Paul’s Boutique — Beastie Boys 47. Take Care — Drake 46. Exodus — Bob Marley & The Wailers 45. Homogenic — Björk 44. Innervisions — Stevie Wonder 43. Remain in Light — Talking Heads 42. Control — Janet Jackson 41. Aquemini — OutKast 40. I Never Loved a Man the Way I Love You — Aretha Franklin 39. Illmatic — Nas 38. Tapestry — Carole King 37. Enter the Wu-Tang (36 Chambers) — Wu-Tang Clan 36. BEYONCÉ — Beyoncé 35. London Calling — The Clash 34. It Takes a Nation of Millions to Hold Us Back — Public Enemy 33. Kid A — Radiohead 32. Ready to Die — The Notorious B.I.G. 31. Jagged Little Pill — Alanis Morisette 30. WHEN WE ALL FALL ASLEEP, WHERE DO WE GO? — Billie Eilish 29. The Low End Theory — A Tribe Called Quest 28. The Dark Side of the Moon — Pink Floyd 27. Led Zeppelin II — Led Zeppelin 26. My Beautiful Dark Twisted Fantasy — Kanye West 25. Kind of Blue — Miles Davis 24. The Rise and Fall of Ziggy Stardust and the Spiders From Mars — David Bowie 23. Discovery — Daft Punk 22. Born to Run — Bruce Springsteen 21. Revolver — The Beatles 20. Pet Sounds — The Beach Boys 19. The Chronic — Dr. Dre 18. 1989 (Taylor’s Version) — Taylor Swift 17. What’s Going On — Marvin Gaye 16. Blue — Joni Mitchell 15. 21 — Adele 14. Highway 61 Revisited — Bob Dylan 13. The Blueprint — JAY-Z 12. OK Computer — Radiohead 11. Rumors — Fleetwood Mac 10. Lemonade — Beyoncé 9. Nevermind — Nirvana 8. Back to Black — Amy Winehouse 7. good kid, m.A.A.d city (Deluxe Version) — Kendrick Lamar 6. Songs in the Key of Life — Stevie Wonder 5. Blonde — Frank Ocean 4. Purple Rain — Prince & The Revolution 3. Abbey Road — The Beatles 2. Thriller — Michael Jackson 1. The Miseducation of Lauryn Hill — Lauryn Hill
3121Loading...
25
Написал туториал как оплатить 👨‍💻 Apple Developer Program из России 🐤 https://sparrowcode.io/ru/tutorials/pay-for-apple-developer-account-from-ru Если Apple ID в регионе РФ, то не получится создать покупки и подписки. Что делать, если нужны ин-апы, тоже разобрал в туториале
1957Loading...
26
Скажем Ивану огромнейшее спасибо 💪
3550Loading...
27
На Youtube выложил видел с горячими кнопками 🔥
4665Loading...
28
СМИ: РЖД переведёт всех проводников на российские смартфоны на базе ОС «Аврора» А вам давно говорились, бросайте гейский софт 🙂 https://habr.com/ru/news/815487/
4753Loading...
29
Наконец-то я перенес блок с фундаментальными знаниями Swift 🥳 Обратите внимание, при оформлении подписки Course, вы получаетет доступ и к фундаментальным знаниями и к паттерну "Координатор". "Базовые знания" могут быть полезны для тех, кто только начал изучать Swift или же хочет проверить и закрепить свои знания. В стоимость подписки входят видео-материалы + текстовые конспекты аналогичные по наполняемости. Сам выбираешь удобный для себя формат или комбинируешь для максимального закрепления результата. В подписку входят тесты по каждой теме. В "Базовые знания" входит 26 тем. Список тем, смотри здесь! П.С. Домашние задания и созвоны опциональны (за доп плату) П.П.С. В честь такого события скидка 20% на 1 подписку :)
4260Loading...
30
Media files
3400Loading...
31
struct Car { let speed: Int let color: String init(speed: Int, color: String) { self.speed = speed self.color = color } } extension Car { init(color: String) { self.color = color self.speed = 0 } } var car = Car(color: "red") print(car.color)
3230Loading...
32
Media files
3220Loading...
33
Перехожу к последнему разделу "Extensions" Немного криво вставил код 🙂 class Car { let speed: Int let color: String init(speed: Int, color: String) { self.speed = speed self.color = color } } extension Car { init(color: String) { self.color = color self.speed = 0 } } var car = Car(color: "red") print(car.color)
3300Loading...
34
Перехожу к последнему разделу "Extensions" Немного криво вставил код 🙂
20Loading...
35
Media files
30Loading...
36
Перехожу к последней теме: "Extensions" 🙂 class Car { let speed: Int let color: String init(speed: Int, color: String) { self.speed = speed self.color = color } } extension Car { init(color: String) { //error self.color = color self.speed = 0 } } var car = Car(color: "red") print(car.color)
20Loading...
37
Media files
3301Loading...
38
protocol Car { var speed: Int { get set } func drive() } struct Lada: Car { var speed: Int = 0 mutating func drive() { speed += 10 } }
3281Loading...
39
Media files
3300Loading...
40
Media files
3250Loading...
Хотя, возможно, "захватывает" просто в контексте резало слух, потому что в implicit captures я также писал "захватывает по значению" 🙂 https://t.me/ioscmdbcmdr/491
نمایش همه...
околоiOSный канал: cmd+B, cmd+R

Если неявные захваты (implicit captures) будут осуществляться по ссылке, то явные (explicit captures) - являются захватами по значению. В примере выше, в замыкании closure значение first захватывается по значению, то есть создается одноименная константа внутри замыкания. Это можно записать следующим образом - строка 19 (немного изменил нейминг для лучшего понимания). Теперь существует переменная first в окружающей/глобальной области видимости и константа first(firstСlosure) в области замыкания. first(firstСlosure) в области замыкания никак не зависит от first в окружающей/глобальной области. Именно поэтому в предыдущем примере в консоль выводилось значение «1 4». В это же время second!.value ссылается на переменную second в окружающей/глобальной области видимости. Для того, чтобы убедиться в этом, присвоим first значение nil. В консоле не увидим никаких изменений, deinit не сработал. На first до сих пор ссылается first(firstСlosure) из замыкания. Присвоим nil для значения second. В консоле увидим сообщение…

👍 2
Давайте разбираться Смотрел мок-собес. Там говорили, что «for цикл захватывает массив в стек, таким образом, что он не пересчитывает внутри for цикла». Вроде бы все верно и логично, но слово «захватывает» ввело в некое заблуждение. Решил погуглить... Из документации IteratorProtocol: Whenever you use a for-in loop with an array, set, or any other collection or sequence, you’re using that type’s iterator. Swift uses a sequence’s or collection’s iterator internally to enable the for-in loop language construct. Всякий раз, когда вы используете цикл for-in с массивом, набором или любой другой коллекцией или последовательностью, вы используете итератор этого типа. Swift использует внутренний итератор последовательности или коллекции, чтобы включить языковую конструкцию цикла for-in. Также мы знаем, что массив имеет семантику value type + COW. Лезем в доку makeIterator() func makeIterator() -> IndexingIterator<Self> makeIterator возвращает IndexingIterator IndexingIterator перебирает элементы коллекции, сохраняя ее и текущий индекс итерации. Реализация. Из всего этого мы можем сделать вывод, что for-in для перебора использует копию коллекции. Значит создается 2 массива(в нашем случае) : - массив, по которому выполняется итерация - массив, в котором происходит мутация. И в теле for-in мы обращаемся именно к нему. Переходим к примеру.

var array = [1, 2, 3, 4, 5]

for index in array.indices {
    if array[index].isMultiple(of: 2) {
        array.remove(at: index)
    }
    print(array)
}

//Консоль
//[1, 2, 3, 4, 5]
//[1, 3, 4, 5]
//[1, 3, 5]
//Swift/ContiguousArrayBuffer.swift:600: Fatal error: Index out of range
for-in определяет, что необходимо сделать 5 операций (индексы с 0 до 4) 1 итерация (индекс 0) «1» нечетное число, поэтому в консоли видим [1, 2, 3, 4, 5] 2 итерация (индекс 1) «2» четное, удаляем, в консоли - [1, 3, 4, 5] 3 итерация (индекс 2) Сейчас по индексу 2 находится «4» - четное - удаляем. В консоли [1, 3, 5] 4 итерация (индекс 3) Массив array на этот момент состоит из [1, 3, 5], обращаясь по индексу 3 ловим «Index out of range» Такой подход объясняет, как в одном из примеров выше получилось [1, 3, 4] Ставь лайк, если было интересно 👍 Пиши коммент, если есть что добавить/исправить 🥸
نمایش همه...
👍 15
Выведется 3 в консоль?Anonymous voting
  • Да
  • Нет
0 votes
👍 2
Photo unavailableShow in Telegram
Если что, в 4 строке это равенство ==
نمایش همه...
👍 2
Последнее сообщение в консоли перед "Index out of range":Anonymous voting
  • [1, 2, 3, 4, 5]
  • [1, 3, 4, 5]
  • [1, 3, 5]
  • [1]
0 votes
👍 1
Что выведется в консоль?Anonymous voting
  • [1, 2, 3, 4, 5]
  • [1, 3, 4]
  • [1, 3, 5]
  • [1, 4, 5]
  • error
0 votes
👍 1