The simple MVP project (utilizing SOLID principles) is based on using UITableView to display data. It incorporates two custom cells to provide visual diversity in presenting the data. When there is no data available, a Skeleton Cell is shown instead of empty cells, creating a placeholder effect. After an asynchronous data request implemented using async/await, the information is displayed in the table, providing a more comprehensive data representation for the user.
A standard UIKit component for displaying data with pagination (loading additional content while scrolling) and pull-to-refresh functionality added.
Custom cells have been implemented:
- SkeletonCell - a placeholder cell shown when the user has not yet received data from the network.
- ComicCell - a cell for displaying content retrieved from the network. In the scope of the test project, it utilized 2 UILabels, with one cell responsible for content display.
![SkeletonCell](https://private-user-images.githubusercontent.com/108525911/241258889-4ee75677-d308-44a8-9685-4e0534e802f7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTkxMjM1MTQsIm5iZiI6MTcxOTEyMzIxNCwicGF0aCI6Ii8xMDg1MjU5MTEvMjQxMjU4ODg5LTRlZTc1Njc3LWQzMDgtNDRhOC05Njg1LTRlMDUzNGU4MDJmNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyM1QwNjEzMzRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01YjJiZmI1OGQ2NmRmZjdiMjExOTUxNzcxNGM4Y2VkODEzYTExMDcyODY5ODI3NDhmODRjY2JmYjU5YjIwM2M1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.xHq77nsP0OUiZnP3-eUEXSrGCZOiCR9r3lrEk_a7NWo)
![ComicCell](https://private-user-images.githubusercontent.com/108525911/241258906-d1f9da9e-d48a-479b-bcb5-65e0b00332a8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTkxMjM1MTQsIm5iZiI6MTcxOTEyMzIxNCwicGF0aCI6Ii8xMDg1MjU5MTEvMjQxMjU4OTA2LWQxZjlkYTllLWQ0OGEtNDc5Yi1iY2I1LTY1ZTBiMDAzMzJhOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyM1QwNjEzMzRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xOTczMDY2NzM0NTQ2MjFlZTE2Y2QwZTk1MjdhNzkyN2UwZjZiNGEzMjJkOTQ4YjA5MmE0MmVmMjQ2OTQzM2U2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.6QKzFbELMc1s0ubYWuzQcqbAuthKHK8hFt-cF2MXXR0)
Addition to UIView (applicable to all elements). AddSkeletonLayer, the method creates an animated layer applied to an element, is used to create mock objects that have not received content to display.
The async/await method is implemented to obtain data using the MARVEL API, the request consists of the main part, as well as the hash part (the encrypted part of the request using time, public key, private key), the MD5. NetworkMonitor encryption method to monitor the user's network status, at the time of the request to the server, in the absence of access to the network, the user will receive a notification.