Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - BW Swift
Added 06 Jan 2025

BW Swift

@bwswift
Number of subscribers: 1 742
Photos: 1,710
Videos: 176
Links: 1,590
Description:
Канал створений для навчання програмування на swift та розробці програм під iOS. Мета проекту - допомогти студентам пройти шлях від розробника-початківця до оплачуваного фахівця. Тут я публікую актуальні та цікаві статті щодо iOS розробки. Адмін: @bws2007
Source

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

Telegram community logo - BW Swift BW Swift @bwswift
746 Views/Reach 2025-08-04 16:14 Message №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. Можеш підписатися, якщо було цікаво =)