Вхід Реєстрація
Реклама
Ваше рекламне місце
Забронюйте цей слот без конкуренції на обраний період.
Купити рекламу →
Логотип телеграм спільноти - BW Swift
Додано 06 січ 2025

BW Swift

@bwswift
Кількість підписників: 1 748
Фото: 1,710
Відео: 176
Посилання: 1,590
Опис:
Канал створений для навчання програмування на swift та розробці програм під iOS. Мета проекту - допомогти студентам пройти шлях від розробника-початківця до оплачуваного фахівця. Тут я публікую актуальні та цікаві статті щодо iOS розробки. Адмін: @bws2007
Джерело

BW Swift | Хочу поділитися простим, але ефективним трюком зі Swift. Чи мали ви ко...

Логотип телеграм спільноти - BW Swift BW Swift @bwswift
746 Охват/переглядів 2025-08-04 16:14 Повідомлення №1948
Хочу поділитися простим, але ефективним трюком зі Swift. Чи мали ви коли-небудь необхідність зафейкати дані в структурі, до параметрів якої ви не маєте доступ? Наприклад, якась публічна структура, але з приватним інітом в якомусь сторонньому пакеті. Ви можете створити фейкову структуру з ідентичною бітовою комбінацією та зкастувати її у потрібний тип! Все що потрібно: - знайти порядок і типи полів.- створити фейкову структуру з ними у правильній послідовності. - використати unsafeBitCast для трансформації нашого фейку у потрібний тип. let fake = (10, "World", true)let hacked = unsafeBitCast(fake, to: Original.self) Чи це безпечно? Ні. Чому це небезбечно: - структури в Swift не гарантують стабільний layout памʼяті. - наприклад, String не є типом з фіксованим розміром, і тому його представлення в памʼяті може відрізнятися від очікуваного. - цей трюк повністю обходить логіку типів в Swift та логіку, можливо закладену для оригінального типу, що може призвести до неочікуваних результатів. Це цікавий трюк з памʼяттю, але непридатний до проду, бо порушує типобезпечність. Практичне застосування таке: - Тестування структур з приватним ініціалізатором чи полями. - Реверс та дослідження приватних API (приклад на 2му скрині). P. S. На другому скрині приклад, як подібним способом можна фейкнути View в SwiftUI. Наприклад, вкинувши Bool в закриту проперті isSecure у TextField. Агресивно 😅------------------------------Я часто пишу і писав різні здебільшого технічні цікавинки на моєму Linkedin. Можеш підписатися, якщо було цікаво =)