Logical Operators
Add to favorites
Master SwiftUI's logical operators: Building intelligent iOS apps with robust decision-making systems

SwiftUI Fundamentals Handbook
1
Building Your iOS Development Foundation
2
SwiftUI Print Debugging
18:04
3
Comments Documentation Waypoints
22:02
4
Variables and Constants
11:37
5
Strings and Interpolation
13:22
6
Swift Operators: The Foundation of SwiftUI Logic
5:34
7
Swift Unary Operators
15:00
8
Swift Binary Operators
3:36
9
Arithmetic Operators
6:11
10
If-Else and Comparison Operators
12:32
11
Logical Operators
6:03
12
Ternary Operators
6:22
13
Blocks and Scope
10:22
14
Swift Collections: Arrays, Sets, and Dictionaries Overview
7:00
15
Swift Arrays
8:54
16
Swift Sets
11:03
17
Swift Dictionaries
18
For-Loops and Range
19
Optionals
20
Functions
1. Introduction to Logical Operators in SwiftUI
In modern iOS development with SwiftUI, understanding logical operators is crucial. Think of logical operators as the decision-makers in your code – they help your app determine what content to show, when to enable or disable features, and how to respond to user actions. Just as we make decisions in real life based on multiple conditions ("If it's weekend AND not raining, I'll go for a run"), our apps need similar decision-making capabilities.
A. What Are Logical Operators?
Logical operators are special symbols or keywords that allow us to perform Boolean logic operations in our code. In Swift and SwiftUI, we have three primary logical operators:
- The NOT operator (!) - Inverts a Boolean value
- The AND operator (&&) - Combines two conditions that must both be true
- The OR operator (||) - Requires at least one condition to be true
These operators work with Boolean values (true or false) and form the foundation of conditional logic in our SwiftUI applications. For example, you might use these operators to:
- Show or hide certain UI elements
- Enable or disable buttons based on user input
- Control access to premium features
- Validate form inputs
- Manage navigation flow
Just as traffic lights control the flow of vehicles on the road, logical operators control the flow of your application's logic, making them an essential tool in any SwiftUI developer's toolkit.
B. Why Are They Important in SwiftUI?
In SwiftUI's declarative framework, logical operators play a crucial role in:
i. View Composition They help determine when and how views should be displayed, enabling dynamic UI updates based on state changes.
ii. State Management They're essential for controlling view behavior based on multiple state variables, especially when combining different conditions.
iii. User Input Validation They allow us to create complex validation rules for forms and user input, ensuring data integrity.
iv. Navigation Control They help manage navigation flow and determine when certain navigation paths should be available.
C. Common Use Cases
In everyday SwiftUI development, you'll frequently use logical operators for:
i. Conditional View Rendering This pattern ensures users see the right content at the right time. The code checks two conditions: whether the user is logged in AND has completed the onboarding process. Only when both conditions are true will they see the HomeView. This is crucial for maintaining a proper app flow and user experience. For example, even if a user is logged in, they should still complete onboarding first.
if isLoggedIn && hasCompletedOnboarding {
HomeView()
} else {
OnboardingView()
}
ii. Form Validation This validation combines multiple rules to determine if a form is valid. It checks that the username is not empty (using the NOT operator), the password is at least 8 characters long or the user is an admin (who might have different validation rules) One practical use would be enabling/disabling a submit button based on this validation.
let isFormValid = !username.isEmpty && password.count >= 8 || isAdminUser
iii. State-Dependent UI Updates This button's state depends on two conditions: The form must be valid (NOT invalid). The app must NOT be loading. The button is disabled if either the form is invalid OR a loading operation is in progress. This prevents users from submitting invalid data or submitting multiple times while processing.
Button("Submit") {
// Action
}
.disabled(!isFormValid || isLoading)
iv. Complex UI Logic This shows content based on complex subscription logic: Show content if the user is subscribed AND their trial hasn't ended OR show content if they're a premium user regardless of other conditions. This type of logic is common in apps with different user tiers and access levels.
if (isSubscribed && !trialEnded) || isPremiumUser {
PremiumContent()
}
v. Error Handling This determines when to show an error message by checking: If there's no connection (NOT connected) OR if there's a network error AND we're not currently retrying. This helps provide clear feedback to users about connection issues while avoiding showing errors during automatic retry attempts.
let showError = !isConnected || hasNetworkError && !isRetrying
Each of these examples demonstrates how logical operators can be combined to create clear, maintainable conditions that control your app's behavior. The key is to break down complex conditions into smaller, logical pieces that work together to create the desired outcome. These operators become particularly powerful when combined with SwiftUI's state management system, allowing us to create responsive and dynamic user interfaces that adapt to changing conditions and user interactions.
2. Basic Concepts: Understanding Swift's Logical Operators
Logical operators in Swift form the building blocks of conditional logic, allowing your app to make decisions based on multiple factors. These powerful tools evaluate Boolean expressions (true/false values) to determine program flow, UI rendering, and business rule implementation. While simple in concept, they enable remarkably complex decision-making capabilities when used properly. Mastering these operators is essential for creating responsive, dynamic, and intelligent SwiftUI applications that adapt to user actions and changing conditions.
A. The NOT Operator (!)
The NOT operator (!
) is the simplest of the logical operators, but it's incredibly powerful. It inverts a Boolean value, turning true
into false
and vice versa.
struct ContentView: View {
@State private var isEnabled = true
var body: some View {
VStack(spacing: 20) {
// Basic usage
Text("Feature is: \(isEnabled ? "Enabled" : "Disabled")")
// Practical example with button state
Button(action: {
isEnabled.toggle()
}) {
Text(isEnabled ? "Disable Feature" : "Enable Feature")
}
.foregroundColor(isEnabled ? .green : .red)
// Only show welcome message if feature is enabled
let username: String? = "John Doe"
if isEnabled, let username = username, !username.isEmpty {
Text("Welcome \(username)")
}
}
}
}
B. The AND Operator (&&)
The AND operator (&&
) combines two conditions and returns true
only if both conditions are true
. It's perfect for validating multiple requirements.
struct LoginView: View {
@State private var email = ""
@State private var password = ""
@State private var isAgreedToTerms = false
// Validation using AND operator
var isFormValid: Bool {
!email.isEmpty && // Email must not be empty
email.contains("@") && // Must contain @ symbol
password.count >= 8 && // Password length check
isAgreedToTerms // Must agree to terms
}
var body: some View {
VStack {
TextField("Email", text: $email)
SecureField("Password", text: $password)
Toggle("I agree to terms", isOn: $isAgreedToTerms)
Button("Sign Up") {
// Signup action
}
.disabled(!isFormValid)
// Show validation message
if !isFormValid && !email.isEmpty {
Text("Please complete all requirements")
.foregroundColor(.red)
}
}
.padding()
}
}
C. The OR Operator (||)
The OR operator (||
) returns true
if at least one of the conditions is true
. It's useful for handling multiple valid states or fallback scenarios.
struct ContentAccessView: View {
@State private var isPremiumUser = false
@State private var hasFreeTrialAccess = false
@State private var isEmployee = false
// Access control using OR operator
var hasAccess: Bool {
isPremiumUser || hasFreeTrialAccess || isEmployee
}
var body: some View {
VStack {
if hasAccess {
Text("Premium Access")
} else {
VStack {
Text("Access Required")
Text("You can get access by:")
// Show different access options
if !isPremiumUser {
Text("• Becoming a premium user")
}
if !hasFreeTrialAccess {
Text("• Starting a free trial")
}
}
}
// Debug toggles
Toggle("Premium User", isOn: $isPremiumUser)
Toggle("Free Trial", isOn: $hasFreeTrialAccess)
Toggle("Employee", isOn: $isEmployee)
}
.padding()
}
}
D. Combining Operators
You can combine these operators to create complex conditions. Remember to use parentheses to make the order of operations clear:
struct ValidatedInputView: View {
@State private var input = ""
@State private var isProcessing = false
@State private var isOptionalFieldEnabled = false
var isValid: Bool {
// Complex validation combining multiple operators
(!input.isEmpty && input.count >= 3) || // Valid input
(isOptionalFieldEnabled && !isProcessing) // Optional case
}
var body: some View {
VStack {
TextField("Input", text: $input)
if !isValid {
Text("Input must be at least 3 characters")
.foregroundColor(.red)
}
}
.padding()
}
}
3. Advanced Topics in SwiftUI Logical Operators
As you become more proficient with SwiftUI, you'll encounter situations that require more sophisticated logical operations. This section explores advanced concepts that will help you write more efficient, maintainable, and error-free code. Understanding these topics is crucial for building robust iOS applications that can handle complex business logic and user interactions.
A. Combining Multiple Operators
When building real-world applications, you'll often need to combine multiple logical operators to create complex conditions. Think of it like building a sophisticated security system where multiple conditions must be met. For example, a premium feature might be accessible only if the user is subscribed AND has verified their email, OR if they're in a trial period AND the trial hasn't expired.
Let's create a comprehensive example that demonstrates combining multiple logical operators in a real-world scenario:
struct ContentView: View {
@State private var isSubscribed = false
@State private var hasTrialAccess = true
@State private var daysLeftInTrial = 5
@State private var isLoading = false
@State private var hasVerifiedEmail = false
// Complex conditional logic combining multiple operators
var canAccessPremiumContent: Bool {
(isSubscribed || (hasTrialAccess && daysLeftInTrial > 0)) && // Subscription status
!isLoading && // Not during loading
hasVerifiedEmail // Email verification required
}
var body: some View {
VStack(spacing: 20) {
// Status display using multiple conditions
Text(accessStatusText)
.font(.headline)
.foregroundColor(statusColor)
// Trial status
if hasTrialAccess && daysLeftInTrial > 0 {
Text("Trial Access: \(daysLeftInTrial) days left")
.foregroundColor(.orange)
}
// Email verification status
Toggle("Verify Email", isOn: $hasVerifiedEmail)
.padding()
// Subscription toggle
Toggle("Subscribe", isOn: $isSubscribed)
.padding()
// Complex button state
Button(action: {
isLoading = true
// Simulate network request
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
isLoading = false
if canAccessPremiumContent {
// Handle successful access
daysLeftInTrial -= 1
}
}
}) {
HStack {
Text(buttonText)
if isLoading {
ProgressView()
.progressViewStyle(CircularProgressViewStyle(tint: .white))
}
}
.frame(maxWidth: .infinity)
.padding()
.background(buttonBackgroundColor)
.foregroundColor(.white)
.cornerRadius(10)
}
.disabled(!canAccessPremiumContent || isLoading)
.padding()
// Debug information
VStack(alignment: .leading, spacing: 10) {
Text("Debug Info:")
.font(.headline)
Text("Subscribed: \(isSubscribed ? "Yes" : "No")")
Text("Trial Active: \(hasTrialAccess ? "Yes" : "No")")
Text("Days Left: \(daysLeftInTrial)")
Text("Email Verified: \(hasVerifiedEmail ? "Yes" : "No")")
Text("Can Access: \(canAccessPremiumContent ? "Yes" : "No")")
}
.padding()
.background(Color.gray.opacity(0.1))
.cornerRadius(10)
.padding()
}
}
// Computed properties for UI elements
private var accessStatusText: String {
if isSubscribed && hasVerifiedEmail {
return "Full Access Granted"
} else if hasTrialAccess && daysLeftInTrial > 0 {
return "Trial Access"
} else {
return "No Access"
}
}
private var statusColor: Color {
if isSubscribed && hasVerifiedEmail {
return .green
} else if hasTrialAccess && daysLeftInTrial > 0 {
return .orange
} else {
return .red
}
}
private var buttonText: String {
if isLoading {
return "Loading..."
} else if canAccessPremiumContent {
return "Access Premium Content"
} else {
return "Access Restricted"
}
}
private var buttonBackgroundColor: Color {
if !canAccessPremiumContent {
return .gray
} else if isLoading {
return .blue.opacity(0.8)
} else {
return .blue
}
}
}
#Preview {
ContentView()
}
B. Short-Circuit Evaluation
Short-circuit evaluation is a powerful optimization feature in Swift that can significantly improve your app's performance. Imagine you're checking multiple conditions in a chain - Swift is smart enough to stop checking as soon as it knows the final result.
i. AND Operator Short-Circuiting For example, in the expression A && B:
If A is false, Swift won't even evaluate B because the result must be false. This is particularly useful when B is an expensive operation (like a network call)
ii. OR Operator Short-Circuiting Similarly, for A || B:
If A is true, Swift won't evaluate B because the result must be true
C. Common Pitfalls
i. Operator Precedence Confusion
struct PitfallsView: View {
@State private var age = 25
@State private var hasPermission = true
@State private var hasParentalConsent = false
var body: some View {
VStack {
// WRONG: Unclear precedence leads to unexpected behavior
if age >= 18 && hasPermission || age >= 21 {
AdultContent()
}
// CORRECT: Clear precedence with parentheses
if (age >= 18 && hasPermission) || age >= 21 {
AdultContent()
}
// EVEN BETTER: Break down complex conditions
if canAccessContent {
AdultContent()
}
}
}
private var canAccessContent: Bool {
let hasAdultPermission = age >= 18 && hasPermission
let isLegalAdult = age >= 21
return hasAdultPermission || isLegalAdult
}
}
Why It's Important:
- Operator precedence can lead to subtle bugs that are hard to catch
- Unclear logic makes code harder to maintain and review
- Can result in security vulnerabilities if access control is implemented incorrectly
ii. Optional Handling Mistakes
struct OptionalHandlingView: View {
@State private var username: String?
@State private var isEnabled = true
@State private var email: String?
var body: some View {
VStack {
// WRONG: Optional chaining can lead to unexpected results
if username?.isEmpty && isEnabled {
Text("Invalid username")
}
// CORRECT: Proper optional handling
if let username = username {
if username.isEmpty && isEnabled {
Text("Please enter a username")
}
} else {
Text("Username not set")
}
// BETTER: Using multiple optional bindings
if let username = username,
let email = email,
!username.isEmpty,
email.contains("@") {
Text("Valid user information")
}
}
}
}
Common Issues:
- Optional chaining can result in nil coalescing
- Logic may not execute as expected when dealing with optionals
- Can lead to runtime crashes if not handled properly
4. Best Practices
A. Use Computed Properties for Complex Logic
struct BestPracticesView: View {
@State private var email = ""
@State private var password = ""
// Complex logic isolated in computed property
private var isValidForm: Bool {
!email.isEmpty &&
email.contains("@") &&
password.count >= 8
}
var body: some View {
VStack {
TextField("Email", text: $email)
SecureField("Password", text: $password)
Button("Submit") {
// Action
}
.disabled(!isValidForm)
}
}
}
B. Break Down Complex Conditions
struct ComplexValidationView: View {
@State private var user: User?
// Break down complex conditions into meaningful parts
private var hasValidSubscription: Bool {
user?.isSubscribed == true && user?.subscriptionEndDate ?? Date() > Date()
}
private var hasRequiredPermissions: Bool {
user?.permissions.contains(.premium) == true
}
var canAccessFeature: Bool {
hasValidSubscription && hasRequiredPermissions
}
}
C. Use Early Returns with Guard
func validateUser() -> Bool {
guard !isLoading else { return false }
guard let user = currentUser else { return false }
guard user.isActive else { return false }
return user.hasPermission && user.isVerified
}
D. Document Complex Logic
/// Determines if the user can purchase premium content
/// Requires:
/// - User is logged in
/// - Has verified email
/// - No active purchase in progress
/// - Either has sufficient balance or valid payment method
var canPurchase: Bool {
guard let user = currentUser else { return false }
return !isProcessingPurchase &&
user.isEmailVerified &&
(user.balance >= price || user.hasValidPaymentMethod)
}
5. Practical App Examples
The following examples showcase real-world applications that heavily rely on logical operators for decision-making, filtering, and complex business logic. Each example demonstrates how combining logical operators (&&, ||, !) creates sophisticated control flows that power modern app features. These operators are essential for handling conditional logic, validating user inputs, managing access control, and implementing business rules.
Whether it's determining a perfect match in a dating app or calculating eligibility for a financial transaction, logical operators form the foundation of app intelligence. They help transform simple boolean checks into complex decision trees that drive user experiences and app functionality.
A. Dating App Match System
In a dating app, logical operators form the backbone of the matching algorithm. Let's look at how these operators work together to create meaningful connections:
i. Age Range Compatibility
let isAgeCompatible = otherUser.age >= user.preferredMinAge &&
otherUser.age <= user.preferredMaxAge
The double AND (&&
) ensures both minimum and maximum age preferences are respected.
ii. Location-Based Matching
let isWithinRadius = user.location.distance(from: otherUser.location) <= user.maxDistance
A distance threshold enforces geographical preferences.
iii. Interest Overlap
let hasSharedInterests = !user.interests.intersection(otherUser.interests).isEmpty &&
user.mandatoryInterests.isSubset(of: otherUser.interests)
Using set operations with logical operators to match compatible interests.
iv. Deal-Breaker Preferences
let meetsPreferences = (!user.smokingDealBreaker || !otherUser.isSmoker) &&
(!user.petsDealBreaker || otherUser.hasNoPets)
Complex combinations of NOT (!
) and AND (&&
) handle deal-breakers.
v. Match Status
let isPotentialMatch = isAgeCompatible &&
isWithinRadius &&
hasSharedInterests &&
meetsPreferences &&
!user.blockedUsers.contains(otherUser.id)
All conditions must be true for a potential match.
vi. Featured Match Boost
let shouldShowInFeed = isPotentialMatch ||
(otherUser.isPremium && hasMinimalCompatibility)
OR (||
) operator provides alternative paths to matching.
B. Financial Budget Tracker
Transaction categorization logic: A financial budget tracker serves as a sophisticated financial command center, where logical operators work in concert to analyze spending patterns, enforce budget limits, and provide timely financial insights. This system processes a continuous stream of transaction data, using complex conditional logic to categorize expenses, detect patterns, and trigger notifications when spending thresholds are approached or exceeded.
The system functions as a financial guardian, constantly evaluating transactions against predefined rules and user preferences to maintain budget integrity and financial goals. Through its intricate web of logical operations, it can identify spending trends, predict potential budget overruns, and suggest corrective actions before financial issues arise.
Key elements that the logical operators handle:
- Spending limit alerts (
>=
,&&
) - Category-based budgeting (
&&
,||
) - Recurring payment detection (
&&
,==
) - Investment opportunity flags (
&&
,>=
,<=
) - Emergency fund status (
||
,<
) - Month-end balance projections (
&&
,+
,-
)
C. Travel Booking System
Booking validation engine: A robust travel booking system relies on a complex web of logical operators to ensure seamless reservation management while preventing overbooking and maintaining user satisfaction. The validation engine acts as a gatekeeper, processing multiple conditions simultaneously to make split-second decisions about booking availability, price calculations, and reservation conflicts. This intricate system needs to handle edge cases like last-minute cancellations, special requests, and seasonal variations while maintaining strict business rules and regulatory compliance.
Key elements that the logical operators handle:
- Date availability (
&&
,!
) - Price range matching (
&&
,<=
,>=
) - Room type availability (
&&
,||
) - Guest number restrictions (
&&
,<=
) - Cancellation policy checks (
&&
,||
) - Special request handling (
&&
,||
)
D. Smart Home Controller
Automation logic: The smart home automation system orchestrates a complex dance of devices, sensors, and user preferences through an intricate network of logical operators. At its core, the system continuously evaluates multiple conditions in real-time to make intelligent decisions about home management. These operators work together to create a responsive and efficient living environment that adapts to user behavior while optimizing energy usage and maintaining security.
This automation hub processes thousands of boolean conditions per second, evaluating everything from motion sensors to temperature thresholds, creating a seamless and intelligent living experience. The system must handle multiple scenarios simultaneously while preventing conflicting automations and ensuring user comfort and safety remain paramount.
Key elements that the logical operators handle:
- Time-based triggers (
&&
,<=
,>=
) - Occupancy detection (
&&
,||
) - Energy saving rules (
&&
,<=
) - Security mode conditions (
&&
,!
) - Temperature control logic (
&&
,<=
,>=
) - Device conflict prevention (
&&
,!
)
E. Learning Platform
Content access control: An educational platform's content access system operates as a sophisticated gatekeeper, leveraging logical operators to create personalized learning pathways while maintaining academic integrity. This system dynamically manages user progression through course material, ensuring students meet prerequisites and complete necessary assessments before advancing. The logical architecture adapts to individual learning paces while enforcing educational standards and institutional requirements.
The system acts as an intelligent curator, continuously evaluating multiple conditions to determine what content each learner can access at any given moment. This creates a structured yet flexible learning environment that supports both guided progression and self-paced exploration, all while maintaining academic rigor and course integrity.
Key elements that the logical operators handle:
- Course prerequisites (
&&
,||
) - Progress tracking (
&&
,>=
) - Assessment unlocking (
&&
,>=
) - Achievement system (
&&
,||
) - Resource availability (
&&
,||
) - Time-based access (
&&
,<=
)
Each of these applications demonstrates how logical operators are crucial for:
- Complex decision making
- User experience personalization
- Safety and security rules
- Feature access control
- Content filtering
- Performance optimization
- Error prevention
- Business rule implementation
6. Conclusion
Working with logical operators in SwiftUI is fundamental to creating robust, intelligent, and user-friendly applications. From simple conditional rendering to complex business logic, understanding how to effectively combine and implement these operators (&&
, ||
, !
) enables developers to build sophisticated decision-making systems that enhance user experience and maintain application integrity.
A. Next Steps
i. Practice Implementation Practice implementing logical operators in real-world scenarios, starting with simple form validation
ii. Explore Advanced Patterns Explore advanced patterns like short-circuit evaluation for performance optimization
iii. Learn Condition Breakdown Learn to break down complex conditions into readable, maintainable computed properties
iv. Master Optional Handling Master handling optionals with logical operators
v. Study Common Pitfalls Study common pitfalls and best practices in production environments
vi. Experiment with Combinations Experiment with different combinations of operators in various use cases
vii. Implement Error Handling Implement error handling and validation feedback systems
Learn with videos and source files. Available to Pro subscribers only.
Purchase includes access to 50+ courses, 320+ premium tutorials, 300+ hours of videos, source files and certificates.
Templates and source code
Download source files
Download the videos and assets to refer and learn offline without interuption.
Design template
Source code for all sections
Video files, ePub and subtitles
Videos
Assets
1
Building Your iOS Development Foundation
Master the fundamentals of Swift programming with hands-on examples designed for beginners and experienced developers alike
2
SwiftUI Print Debugging
Print debugging: Unlock the invisible processes with strategic print statements that illuminate state changes, view lifecycles and data flow
18:04
3
Comments Documentation Waypoints
Transform your code from mysterious instructions to a comprehensive narrative with strategic comments that explain the why
22:02
4
Variables and Constants
Learn when and how to use variables and constants to write safer, more efficient SwiftUI code
11:37
5
Strings and Interpolation
Learn essential string operations in Swift: Build better iOS apps with efficient text handling techniques
13:22
6
Swift Operators: The Foundation of SwiftUI Logic
Building powerful iOS apps through the language of operations
5:34
7
Swift Unary Operators
Mastering the elegant simplicity of unary operators for cleaner, more expressive SwiftUI code that transforms your UI with minimal syntax
15:00
8
Swift Binary Operators
Master the two-operand symbols that transform complex interface logic into concise, readable declarations
3:36
9
Arithmetic Operators
Learn how to implement and optimize arithmetic operations in SwiftUI, from basic calculations to complex mathematical interfaces
6:11
10
If-Else and Comparison Operators
Building Dynamic SwiftUI: Mastering If-Else and Comparison Operators
12:32
11
Logical Operators
Master SwiftUI's logical operators: Building intelligent iOS apps with robust decision-making systems
6:03
12
Ternary Operators
Use the power of Swift's ternary conditional operator to create dynamic, responsive interfaces with minimal code in SwiftUI
6:22
13
Blocks and Scope
A comprehensive guide to writing clean, organized code through proper variable management and state control
10:22
14
Swift Collections: Arrays, Sets, and Dictionaries Overview
Organize Your Data Effectively: Learn How to Choose and Optimize the Perfect Collection Type for Your SwiftUI Applications
7:00
15
Swift Arrays
Organize, transform, and display your data with Swift's most essential collection structure
8:54
16
Swift Sets
Mastering Unique Collections with Fast Lookups and Powerful Operations
11:03
17
Swift Dictionaries
Master Swift's key-value collection type with practical examples for efficient data storage, retrieval, and transformation in SwiftUI apps
18
For-Loops and Range
For-Loops and Ranges: Learn how to repeat code efficiently and work with sequences of numbers in Swift
19
Optionals
Optionals in Swift: Understanding Swift's Safety System for Handling Missing Values
20
Functions
Functions in Swift: Building Reusable Code Blocks to Organize and Streamline Your App
Meet the instructor
We all try to be consistent with our way of teaching step-by-step, providing source files and prioritizing design in our courses.
Sourasith Phomhome
UI Designer
Designer at Design+Code
20 courses - 78 hours

Master Agentic Workflows
In this course, you’ll learn how to add agents to your workflows. An agent workflow is more than just a simple automation. Instead of following a fixed script, agents can make decisions, adjust to changes, and figure out the best way to complete a task. We’ll start by exploring what MCP servers are and all the new possibilities they bring. Then, we’ll dive into agentic frameworks that make it easy to build flexible, helpful agents that can take care of your everyday tasks.
2 hrs

Design Multiple Apps with Figma and AI
In this course, you’ll learn to design multiple apps using Figma and AI-powered tools, tackling a variety of real-world UI challenges. Each week, a new episode will guide you through a different design, helping you master essential UI/UX principles and workflows
4 hrs

SwiftUI Fundamentals Handbook
A comprehensive guide to mastering Swift programming fundamentals, designed for aspiring iOS developers. This handbook provides a structured approach to learning Swift's core concepts, from basic syntax to advanced programming patterns. Through carefully sequenced chapters, readers will progress from essential programming concepts to object-oriented principles, building a solid foundation for SwiftUI development. Each topic includes practical examples and clear explanations, ensuring a thorough understanding of Swift's capabilities. This handbook serves as both a learning resource and a reference guide, covering fundamental concepts required for modern iOS development. Topics are presented in a logical progression, allowing readers to build their knowledge systematically while gaining practical programming skills.
2 hrs

Design and Code User Interfaces with Galileo and Claude AI
In this course, you’ll learn how to use AI tools to make UI/UX design faster and more efficient. We’ll start with Galileo AI to create basic designs, providing a solid foundation for your ideas. Next, we’ll refine these designs in Figma to match your personal style, and finally, we’ll use Claude AI to turn them into working code—eliminating the need for traditional prototyping.
4 hrs

Build a React Native app with Claude AI
This comprehensive course explores the integration of cutting-edge AI tools into the React Native development workflow, revolutionizing the approach to mobile application creation. Participants will learn to leverage AI-powered platforms such as Claude and Locofy to expedite coding processes, enhance problem-solving capabilities, and optimize productivity.
14 hrs

Design and Prototype for iOS 18
Design and Prototype for iOS 18 is an immersive course that equips you with the skills to create stunning, user-friendly mobile applications. From mastering Figma to understanding iOS 18's latest design principles, you'll learn to craft two real-world apps - a Car Control interface and an AI assistant.
3 hrs

Master Responsive Layouts in Figma
Creating responsive layouts is a must-have skill for any UI/UX designer. With so many different devices and screen sizes, designing interfaces that look great and work well on all platforms is necessary. Mastering this skill will make you stand out in the field. In this course, we'll start from scratch to create this beautiful design using Figma. You'll learn how to make layouts that are easy to use and work well on any device. We'll cover key concepts and tools to help you master responsive design in Figma.
2 hrs

UI UX Design with Mobbin and Figma
Mobbin is a powerful tool for UI/UX designers seeking inspiration and innovative design solutions. This platform offers a vast collection of real-world mobile app designs, providing a treasure trove of UI elements and layouts.
2 hrs

3D UI Interactive Web Design with Spline
Learn to create 3D designs and UI interactions such as 3D icons, UI animations, components, variables, screen resize, scrolling interactions, as well as exporting, optimizing, and publishing your 3D assets on websites
3 hrs

Design and Prototype for iOS 17 in Figma
Crafting engaging experiences for iOS 17 and visionOS using the Figma design tool. Learn about Figma's new prototyping features, Dev Mode, variables and auto layout.
6 hrs

Design and Prototype Apps with Midjourney
A comprehensive course on transforming Midjourney concepts into interactive prototypes using essential design techniques and AI tools
8 hrs

iOS Design with Midjourney and Figma
Learn the fundamentals of App UI design and master the art of creating beautiful and intuitive user interfaces for mobile applications
1 hrs

UI Design for iOS, Android and Web in Sketch
Create a UI design from scratch using Smart Layout, Components, Prototyping in Sketch app
1 hrs

UI Design a Camera App in Figma
Design a dark, vibrant and curvy app design from scratch in Figma. Design glass icons, lens strokes and realistic buttons.
1 hrs

UI Design for iOS 16 in Sketch
A complete guide to designing for iOS 16 with videos, examples and design files
3 hrs

Prototyping in Figma
Learn the basics of prototyping in Figma by creating interactive flows from custom designs
1 hrs

UI Design Quick Websites in Figma
Learn how to design a portfolio web UI from scratch in Figma
1 hrs

UI Design Android Apps in Figma
Design Android application UIs from scratch using various tricks and techniques in Figma
2 hrs

UI Design Quick Apps in Figma
Design application UIs from scratch using various tricks and techniques in Figma
12 hrs

Figma Handbook
A comprehensive guide to the best tips and tricks in Figma
6 hrs