This is a file that contains all of my 100 Days Of SwiftUI projects which include all challenges and extras
![](https://private-user-images.githubusercontent.com/68568073/357802559-7d100e91-8697-4ff7-9190-297291b62519.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTc4MDI1NTktN2QxMDBlOTEtODY5Ny00ZmY3LTkxOTAtMjk3MjkxYjYyNTE5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYxNmFlNjZmMjFkNWRlOGNkMDg5YzVkZmM1MWIyOWYxN2JmMjZlOWU3OTNlNGNjOTM5ODA2N2VlNjE1ZmU1MGImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.WvSjkrRNuoYtckMn0PlFigKOgHUGynBxLgQEWSBHj-I)
An app that lets the user import photos from their library, then modify them using various image effects.
###Learn
- How to respond to state changes using the onChange() modifier in SwiftUI, enabling dynamic updates and reactions to specific changes within your views.
- How to present multiple options to users using confirmationDialog(), offering a user-friendly way to handle complex interactions and decision-making in SwiftUI.
- How to integrate Core Image with SwiftUI to apply filters and manipulate images, combining the power of image processing with SwiftUI’s declarative syntax.
- How to display empty states using ContentUnavailableView, providing a clear and visually appealing way to inform users when there is no content to display.
- How to load photos from the user’s photo library in SwiftUI, utilizing PhotosPicker to allow users to import images into your app seamlessly.
- How to let users share content from your app using ShareLink, simplifying the process of integrating sharing capabilities within your SwiftUI applications.
- How to prompt users to leave an App Store review, enhancing your app’s visibility and reputation by integrating native review requests.
- How to build a basic UI in SwiftUI, laying the foundation for more complex interfaces and user interactions.
- How to import an image into SwiftUI using PhotosPicker, providing users with a simple and intuitive way to select images from their photo library.
- How to perform basic image filtering using Core Image, applying visual effects to images within your SwiftUI app.
- How to customize filters using confirmationDialog() in SwiftUI, allowing users to select and apply different image filters in a user-friendly way.
- How to share an image using ShareLink, making it easy for users to distribute content from your app to other platforms or people.
Check out the Instafilter Repository here🚀!
![](https://private-user-images.githubusercontent.com/68568073/357805133-6fe9eb89-f9ff-487c-8822-6d8f97a21363.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTc4MDUxMzMtNmZlOWViODktZjlmZi00ODdjLTg4MjItNmQ4Zjk3YTIxMzYzLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJlNDk0OTVkZTFkNzY5YWU0NWU2NGMxMDg5YjdiNTE0ZWJhOGMwZjk0YjFmOWI3OTY1ZDI1OWI3ZDRlZmM1NGYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.43rBnf2ZiRn8WCgH2TYKVp_UmkmyVRgvL8axYe0jIr8)
![Image description](https://private-user-images.githubusercontent.com/68568073/355583683-4c7e7385-3716-4f6f-aa78-e32640a07f6b.jpeg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTU1ODM2ODMtNGM3ZTczODUtMzcxNi00ZjZmLWFhNzgtZTMyNjQwYTA3ZjZiLmpwZWc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgxNFQyMTUyMzlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00MGNhODg2MWNjMDI1OWM4OWRjNWUxOTczNmUxYjc5OGJhZDVlZWIxMmE0MzIwMjJjNzU1ZWNkNmFmZmUxMzg0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.pl3jZfng5pwh4Ec4WlDpseiOBcAhDcMVj_QDtwtBzxE)
MyFriends is your all-in-one social networking app designed to keep you in touch with the people who matter most. Whether you’re sharing moments, chatting with friends, or discovering new connections, MyFriends offers a seamless and engaging experience.
###Learn
- How to use the Codable protocol to easily encode and decode JSON data into Swift types, reducing boilerplate code and improving code clarity.
- How to utilize keyDecodingStrategy in JSONDecoder to automatically convert JSON property names from snake_case to camelCase, allowing for seamless integration between JSON data and Swift code conventions.
- How to implement custom CodingKeys enums for mapping JSON property names to Swift property names, providing flexibility when JSON structure differs from your Swift model.
- How to write custom encoding and decoding methods to handle complex scenarios like type conversion and provide default values, allowing for precise control over the serialization process.
- How to use URLSession to fetch JSON data from the internet, making network requests to retrieve and utilize external data sources in your app.
- How to parse JSON data into Swift models using Codable, enabling structured and type-safe handling of data within your application.
- How to build a dynamic UI using NavigationStack and List in SwiftUI to present data fetched from the internet, facilitating an interactive and user-friendly experience.
- How to create a detail view for displaying more information about a selected user, utilizing SwiftUI’s navigation capabilities to drill down into specific data.
- How to manage data downloads efficiently by checking and ensuring that the data is only fetched once, optimizing performance and resource usage.
- How to use dateDecodingStrategy.iso8601 to automatically decode ISO-8601 formatted date strings into Date objects, simplifying date handling in JSON data.
- The importance of simplifying code and focusing on essential features, enhancing maintainability and ensuring your app is robust and functional for core use cases.
Check out the MyFriends Repository here🚀!
![](https://private-user-images.githubusercontent.com/68568073/355594455-62cf1095-afe3-412e-965b-c9e33aef0a10.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTU1OTQ0NTUtNjJjZjEwOTUtYWZlMy00MTJlLTk2NWItYzllMzNhZWYwYTEwLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA1MWM3MWM2MTM2NjA1MjRlNDY5YTVjNjRlYmQ4NzY0YWZjMDIxNmVkODdjODQ2MjI0ZjNlZjc2MDNjMDgzNTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.HkYHkHv_RyLY41NYbVhzeIJwM6dcN2Rv-dLqP2mi0ow)
![Image description](https://private-user-images.githubusercontent.com/68568073/354820039-594eeb84-42f1-4530-98ff-998f82ba077e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTQ4MjAwMzktNTk0ZWViODQtNDJmMS00NTMwLTk4ZmYtOTk4ZjgyYmEwNzdlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk0MjZlYTkxMDA2NWEwOWJjMDU3YjE5N2M5ZDQ2ZTM2MGY0MjY5NmEwZTk3ZmU1YTRmNjk3NWQ4M2YyZDM3YjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.ry9PPJrlIdNrLc7N6oXuRFsPTiCZvmC2a9u8kYMg1Zc)
An app to track which books you’ve read and what you thought of them.
###Learn
- How to create a custom component with @Binding to allow for dynamic and interactive UI elements that can react to changes in the data model.
- How to accept multi-line text input using TextEditor for capturing and managing detailed user input, such as book reviews or notes.
- An introduction to SwiftData and SwiftUI for building robust data-driven applications that leverage Swift’s modern data handling capabilities.
- How to create and manage books using SwiftData to effectively store, retrieve, and manipulate book information in the app’s data model.
- How to add a custom star rating component to visually represent user ratings, enhancing the user experience with intuitive feedback mechanisms.
- How to build a list using @Query to dynamically display a collection of book entries, leveraging SwiftUI’s powerful data-binding capabilities.
- How to show detailed book information by navigating to individual book detail views, providing users with a comprehensive understanding of their tracked books.
- How to sort SwiftData queries using SortDescriptor to organize book data in a meaningful order, improving data presentation and user navigation.
- How to delete entries from a SwiftData query to manage and maintain the integrity of the app’s data store effectively.
- How to use an alert to pop a NavigationLink programmatically to control navigation flow and enhance user interaction within the app’s UI.
Check out the Bookworm Repository here🚀!
![](https://private-user-images.githubusercontent.com/68568073/354820319-c839808c-b84f-49ba-9593-a1a446f1b55c.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTQ4MjAzMTktYzgzOTgwOGMtYjg0Zi00OWJhLTk1OTMtYTFhNDQ2ZjFiNTVjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEzMzRkYjc3NzYwYjZhNmU1MjJiZWIwMjU0ZjU2MjRlNWEwYzU5Y2U5MTI2ZWY1NTUxNjcwYjZhZmY2MWQzMTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.b1g4dTjQA_hC_Fg7QZp6EF0MiMkLfDgjiHD8H7cyZzQ)
![Image description](https://private-user-images.githubusercontent.com/68568073/353495033-b351db2f-d94f-4e5e-ab3e-1647b66973c2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTM0OTUwMzMtYjM1MWRiMmYtZDk0Zi00ZTVlLWFiM2UtMTY0N2I2Njk3M2MyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUzMTllMmFmYjIwYjJmOTg0ZDNiNGUwMDVhYjA1ZDcxNzdkMDMxNzE3Y2UwYTE3OGQwYmE1MTM1NDc3MDg4MmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.jp2Rorvq1Mt_nd79q7kYUdQeka_nDEQZao2qi9bKSdw)
App for ordering cupcakes.
###Learn
- How to use SwiftUI’s List to dynamically display a collection of data items, enhancing the user interface with interactive elements.
- How to leverage @State and @Binding properties in SwiftUI to manage and share state between views, allowing for responsive UI updates.
- How to implement data fetching using URLSession to perform network requests and handle asynchronous data loading within the app.
- How to parse JSON data into Swift structs using Codable, enabling easy data manipulation and display.
- How to utilize SwiftUI’s NavigationStack to allow users to navigate between views with a back button, improving app usability.
- How to use Alert to display error messages or confirmations to the user, enhancing the app’s user interaction flow.
- How to apply custom styles and modifiers to SwiftUI views for a consistent and visually appealing design across the app.
- How to implement error handling mechanisms to gracefully manage and present network or data errors to the user.
Check out the Cupcake Corner Repository here🚀!
![](https://private-user-images.githubusercontent.com/68568073/353498492-f976feb5-3e7b-495a-bf02-30088477d00c.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTM0OTg0OTItZjk3NmZlYjUtM2U3Yi00OTVhLWJmMDItMzAwODg0NzdkMDBjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWExODJmZTg1ZTU1M2RhMjFkMDU0Yzg4Mzk1MWZlZDQ0N2QyN2JjOGI5MGZkZTc0OGEyNTQ0MjMzOTgxYjBmZjcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.KNcZmGKvr7cAt-FNRDdHqIrhNRW5EbDYLe1PtnYanVM)
![Image description](https://private-user-images.githubusercontent.com/68568073/352073372-e71ec675-37bd-4bdb-bb6d-b1bb177cde13.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTIwNzMzNzItZTcxZWM2NzUtMzdiZC00YmRiLWJiNmQtYjFiYjE3N2NkZTEzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTM1ZWU3ZTQxMTlmYWJiODFlNTk5ZmE2Mjc4YTc0NDdhOTU3YmI2ZmYwMzlhM2IzNjY4YzAzNWVlMGNiZTAxOGEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.cUbpQHnX3i7bTcdj79npY_DeAiLo8KwHo6j6whGUjQ8)
Habit-tracking app, for folks who want to keep track of how much they do certain things. That might be learning a language, practicing an instrument, exercising, etc.
###Learn
- How to use a class with the @Observable macro to manage and track changes in a list of activities, enabling real-time updates in the UI.
- How to use sheet() to present modal views, such as a form for adding new activities, and NavigationLink for navigating to detail screens.
- How to conform data structures to the Identifiable and Equatable protocols, simplifying list management and enabling comparison of activities.
- How to work with UserDefaults to persist data locally, ensuring that user activities and completion counts are saved and reloaded across app launches.
- How to implement a simple form using SwiftUI’s Form, TextField, and Button components to add new activities with a title and description.
- How to build a detail screen that displays an activity’s information and allows users to increment its completion count, updating the data model.
- How to use Codable to serialize and deserialize activity data, making it easy to save to and load from UserDefaults.
- How to use firstIndex(of:) to locate and update specific items within an array, facilitating the modification of activity data when the user interacts with the app.
Check out the HabitHub Repository here🚀!
![](https://private-user-images.githubusercontent.com/68568073/352116456-b4ae2d8d-9c44-46d9-af5a-97e961c013a6.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNTIxMTY0NTYtYjRhZTJkOGQtOWM0NC00NmQ5LWFmNWEtOTdlOTYxYzAxM2E2LmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTEwZDNlNmEzYWI0NmRjMzhiMDUyOGZiOTEyMTk2YWRiMGJjY2RjOGQ1MjJiMWM2ZDdiMjMyNjk4YWFlMTI4MjMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.jbsCajXdu2s-5fD4uqBWDDsp1ld14Xe850Q2yXa3noM)
![Image description](https://private-user-images.githubusercontent.com/68568073/346542083-efe16c23-2be0-45f2-88cb-4b54af93bece.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNDY1NDIwODMtZWZlMTZjMjMtMmJlMC00NWYyLTg4Y2ItNGI1NGFmOTNiZWNlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFlOWY5YmJiNmM3NDcxNmVkNGRjZGFlOTczZDBjNzc1M2FkZTJmMWE4YjY0Mjk2YzlmNGQ0YTU4ZjkzYWMyY2MmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.CrPaTc6aIt2l-SEexwjKMLtRGsWslF-2zYpUXtQKgS8)
An app that lets users learn about the missions and astronauts that formed NASA’s Apollo space program.
###Learn
- How to use ScrollView to work with scrolling data, enabling the display of content larger than the available screen space.
- How to push new views onto the stack using NavigationLink, allowing for navigation between different parts of the app.
- How to work with hierarchical Codable data, making it easier to manage complex data structures.
- How to lay out views in a scrolling grid, providing a flexible way to present items in a grid format.
- How to load a specific kind of Codable data, ensuring precise data handling.
- How to use generics to load any kind of Codable data, increasing the versatility of data loading functions.
- How to format our mission view, creating a polished and user-friendly interface.
- How to show mission details with ScrollView and containerRelativeFrame(), enhancing the presentation of detailed information.
- How to merge Codable structs, simplifying data management and integration.
Check out the Moonshot Repository here🚀!
![](https://private-user-images.githubusercontent.com/68568073/346559083-6555db33-c6df-4192-92fb-3d44ce77948a.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNDY1NTkwODMtNjU1NWRiMzMtYzZkZi00MTkyLTkyZmItM2Q0NGNlNzc5NDhhLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY0MTAwYzU3MjA5MWM3YWQyNDhkZjkyMDIwYTU2OWMyMDliYmI1YTNjNWU4MDFlODRiYjg4NDA0MjI3YzgxMjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.qnb73y5WJTqQNOEMmYp4DXwUDhMi0zzXFdjb5VQd_yw)
![Image description](https://private-user-images.githubusercontent.com/68568073/346535090-cabb5fc2-90e6-48bd-af72-9445cd140aec.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNDY1MzUwOTAtY2FiYjVmYzItOTBlNi00OGJkLWFmNzItOTQ0NWNkMTQwYWVjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVhMGI4YjNkZDdjMGQyYjIwYmNjZDYwNmE0NTNjYjEyZmMzZjJlNmZiZmUzZDI3NmQ3M2QzMmE5MjBiNTg2NGUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.um4nbH_wfi1vo-a8ZDH6FUDK94LROseRlayV7S8MV_o)
iExpense is an expense tracker that separates personal costs from business costs.
###Learn
- How to use UserDefaults to store and retrieve user preferences and app settings.
- How to conform to the Codable protocol for encoding and decoding data, making it easier to save complex objects.
- How to present modals and sheets using sheet(), providing a way to display temporary content over the current view.
- How to delete items from a list using the onDelete() modifier, enhancing the app’s interactivity.
- How to use the @Observable attribute to create observable objects that SwiftUI views can subscribe to, enabling reactive programming.
- How to create forms with text fields and pickers in SwiftUI, streamlining the process of user input.
- How to use Swift Data, sorting and filtering
Check out the iExpense Repository here🚀!
![](https://private-user-images.githubusercontent.com/68568073/346537683-c4fe2737-0a27-4b1a-9912-000c6a316f87.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNDY1Mzc2ODMtYzRmZTI3MzctMGEyNy00YjFhLTk5MTItMDAwYzZhMzE2Zjg3LmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWViZjc4NjI1MmQxMDJkM2Q5ZDkwMDZjZTg1ZWNjODE2MzJlY2I1Y2E5ZGEyOGZmYTg1NDAwZTAwNzI3ZjQ3NDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.O-m7yC3ChW1qHmsVZz6k5xa83IH0_6-Hx5kWpyItZLg)
![Image description](https://private-user-images.githubusercontent.com/68568073/344667809-ef79c445-81b8-4253-bcb5-a2021430a760.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNDQ2Njc4MDktZWY3OWM0NDUtODFiOC00MjUzLWJjYjUtYTIwMjE0MzBhNzYwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkZDJhYjIxNTExMzZjOTBmYzA0YzM2ZGY1Mjk4ZjUyNjQzMTUxNDg3YWRhZjNlNjNhODNmYWU4MzU1Njg3MDAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.0hBDhdT7tdKYX67bqAKA_sFodVqdrxn_UWqbvEE2368)
Welcome to Multiply Mastery, the ultimate edutainment app designed to make learning multiplication tables fun and engaging for kids! With vibrant graphics and playful animations, children can practice their multiplication skills while having a blast.
- How to pass data between views in SwiftUI to maintain state and share information across different parts of the app.
- How to use Emitter Cells to create dynamic confetti animations, enhancing the app’s visual appeal and making learning celebrations more exciting.
- How to utilize SwiftUI’s declarative syntax to build user interfaces that are both interactive and easy to understand.
- How to implement customizable quizzes, allowing users to select ranges and question quantities for tailored practice sessions.
- How to incorporate third-party assets, such as Kenney’s Animal Pack, to add fun themes and characters, making the app more attractive to children.
- How to use SwiftUI modifiers, such as onAppear and onDisappear, to trigger actions when views enter or leave the screen.
Check out the Multiply Mastery Repository here🚀!
![](https://private-user-images.githubusercontent.com/68568073/344720133-4c722123-7a6c-4d2d-bb6c-f27d36f59383.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zNDQ3MjAxMzMtNGM3MjIxMjMtN2E2Yy00ZDJkLWJiNmMtZjI3ZDM2ZjU5MzgzLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg1NjVhNmNjMzMxOTUwNjYwOGQwODBjMzBiYTAxOWM4ZjliNjVjNzVlZWQ2MGY1MjE4NjkxOTg4NzBmN2NhNjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.3gUjtSZiNoXOl69edYXhv8vhdRo6twAuGwQuhzArIGo)
![Image description](https://private-user-images.githubusercontent.com/68568073/303761899-7e92ee01-1ea4-4584-bbd3-c48fde6e510c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zMDM3NjE4OTktN2U5MmVlMDEtMWVhNC00NTg0LWJiZDMtYzQ4ZmRlNmU1MTBjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk5NTI4NTgyYzZkYWE5NjMzODc0YjM1Njc0MjcwNWJiY2MxNzA4YjFlYzlhYzc5Zjc0ZmUxM2Y1ODZjZWQ1ZDgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.ziR1vCiWRSnzA6IMB2MINVk7_MnyGV7xTzQ0-MMSzPI)
The game show players a random eight-letter word, and ask them to make words out of it. For example, if the starter word is “alarming” they might spell “alarm”, “ring”, “main”, and so on.
Check out the Word Scramble Repository here🚀!
- How to use List to display rows of data in a scrollable view.
- How to use onAppear modifier to perform actions when a view appears on screen.
- How to use Bundle to access the app’s resources such as images, sounds, or data files.
- How to use fatalError() to terminate the app when an impossible condition occurs, and how to identify such conditions with experience.
- How to use UITextChecker to check the spelling and grammar of a string, and how to suggest corrections.
![Image description](https://private-user-images.githubusercontent.com/68568073/302059507-5fb7b36f-b100-48e3-956f-d83c29e6b361.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8zMDIwNTk1MDctNWZiN2IzNmYtYjEwMC00OGUzLTk1NmYtZDgzYzI5ZTZiMzYxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY4YWYxZjQwMDhhZmM4OWQ5NDA1MDY2ZDY1NTc1ZDU3ZDFkMjA0YTIzNThiMjgwYTE5Y2U4Y2M5MmQ1OWQ0NjMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wYwa2IlQwJ6uwwTBlOb7rpDXdBDg-W9He0tuZuWz3BU)
BetterRest is an app that uses machine learning to help you optimize your sleep quality based on your wake-up time, desired sleep duration, and coffee consumption. By using regression analysis, it can predict the best time for you to go to bed and adjust to your personal preferences. BetterRest is a smart and simple way to improve your health and well-being. 😴
Check out the Better Rest Repository here🚀!
- How to create and use forms and bindings in SwiftUI to collect user input and update the UI accordingly.
- How to use various components such as DatePicker, Stepper, and Text to display and manipulate data in different formats.
- How to add buttons to the navigation bar and use navigation links to navigate between views.
- How to use Create ML and Core ML to train and use a machine learning model that can perform regression analysis on your data and make predictions.
- How to use machine learning for various purposes and scenarios, while respecting the user’s privacy and security.
![Image description](https://private-user-images.githubusercontent.com/68568073/296508557-9a7541b0-4559-4409-8e3d-c735d31d1f3d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8yOTY1MDg1NTctOWE3NTQxYjAtNDU1OS00NDA5LThlM2QtYzczNWQzMWQxZjNkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM2Zjg2MTI3NmRiZmZmMjRjMWIzZTg3OWYxY2QwNGIxZDBiMjkxMTMwOThjNjJlYzU4ZTNlYmE3MTE3MDhiZWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.dS7Siv6tuBkMyIEIeNVedhZ4C66KyGUwC0HYytm8pb0)
A brain training game that challenges players to win or lose at rock, paper, scissors.
Check out Rock, Paper, Scissors Game Repository here🚀!
![Image description](https://private-user-images.githubusercontent.com/68568073/266797338-f675e746-8013-4396-a301-ee4b1d4c6d3c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8yNjY3OTczMzgtZjY3NWU3NDYtODAxMy00Mzk2LWEzMDEtZWU0YjFkNGM2ZDNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZkNGY0NTI5NTcwZmRjYTQ2NzU0ZDUyYzRlMjdjZDU3YzY3ZDJiY2VhNjA0M2UwODcyNjlmYTY0Y2E2MTEyNDMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.38Q6YPjHSGfTGpOqDdvwzIb2Nw3et3YQCrti8qPgkcQ)
A guessing game that helps users learn some of the many flags of the world.
Check out the Guess The Flag Repository here🚀!
- Stacks to arrange views
- Colors and frames
- Gradients in SwiftUI
- Buttons and images
- Showing alert messages
- Stacking up buttons
- Showing the player’s score with an alert
- Add an @State property to store the user’s score, modify it when they get an answer right or wrong, then display it in the alert and in the score label.
- When someone chooses the wrong flag, tell them their mistake in your alert message – something like “Wrong! That’s the flag of France,” for example.
- Make the game show only 8 questions, at which point they see a final alert judging their score and can restart the game.
![Image description](https://private-user-images.githubusercontent.com/68568073/260293766-c09430c5-82ad-4c19-8520-8f57f44a56b1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8yNjAyOTM3NjYtYzA5NDMwYzUtODJhZC00YzE5LTg1MjAtOGY1N2Y0NGE1NmIxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA2Y2JjNjQyZmExZWQyNWQxNWYwZDIxMmZmOTViMTliOGFjMzA4ZDY5ODhlYzI0YmI5OTI4Nzg1ZmRkYzcxNTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.qYbqjJzvool363b5fLU36rzG090D3Cey7SZI7JVkoAE)
An app that handles unit conversions.
Check out the SwiftScale Repository here🚀!
- Build forms and sections
- Create navigation views and navigation bar titles
- Create tabbar views with icons.
- Store program state with the @State and @FocusState property wrappers
- Sreate user interface controls like TextField and Picker
- Create views in a loop using ForEach.
- Hiding the keyboard
![Image description](https://private-user-images.githubusercontent.com/68568073/258925239-f20f8cea-b483-42ba-ae9b-e6c515771cdc.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM2NzI2NTksIm5iZiI6MTcyMzY3MjM1OSwicGF0aCI6Ii82ODU2ODA3My8yNTg5MjUyMzktZjIwZjhjZWEtYjQ4My00MmJhLWFlOWItZTZjNTE1NzcxY2RjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE0VDIxNTIzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJiYzUwNGMyMzUwMjAwY2EyYzc1MzhkMzk1MjhlODJhMzIwODQ5MDc5NWUxZWQ4Nzc5MjliMTNkODc2ZDk4MjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.SkRLC4P-koDUJt1areVRBg31UqZ1tDmBU33z2YtYa_s)
This project is a check-sharing app that calculates how to split a check based on the number of people and how much tip you want to leave.
Check out the We Spit Repository here🚀!
- Build forms and sections
- Create navigation views and navigation bar titles
- Store program state with the @State and @FocusState property wrappers
- Sreate user interface controls like TextField and Picker
- Create views in a loop using ForEach.
- Add a header to the third section, saying “Amount per person”
- Add another section showing the total amount for the check – i.e., the original amount plus tip value, without dividing by the number of people.
- Change the tip percentage picker to show a new screen rather than using a segmented control, and give it a wider range of options – everything from 0% to 100%. Tip: use the range 0..<101 for your range rather than a fixed array.