Variables & Functions
let name = "fixed" // constant
var count = 0 // mutable
let x: Int = 5 // explicit type
func add(_ a: Int, _ b: Int) -> Int { a + b }
func greet(name: String = "there") -> String { "Hi, \(name)" }
let square: (Int) -> Int = { $0 * $0 }
Optionals
var name: String? = nil
if let n = name { print(n) }
guard let n = name else { return }
let display = name ?? "N/A" // nil-coalescing
name?.count // optional chaining
name! // force unwrap (avoid)
Collections
let arr = [1, 2, 3]
var dict = ["a": 1, "b": 2]
let set: Set<Int> = [1, 2, 3]
arr.map { $0 * 2 }
arr.filter { $0 > 1 }
arr.first(where: { $0 > 1 })
arr.sorted(by: <)
for (key, value) in dict { }
Structs, Enums & Protocols
struct User: Identifiable {
let id = UUID()
var name: String
}
enum Result {
case success(String)
case failure(Error)
}
protocol Greetable { func greet() -> String }
extension User: Greetable {
func greet() -> String { "Hi, \(name)" }
}
SwiftUI State
@State private var count = 0 // local
@Binding var isOn: Bool // two-way from parent
@StateObject private var vm = ViewModel() // owns an ObservableObject
@ObservedObject var vm: ViewModel // receives one
@EnvironmentObject var settings: Settings // from environment
@Published var value = 0 // inside ObservableObject
SwiftUI Layout
VStack(spacing: 12) { /* vertical */ }
HStack { /* horizontal */ }
ZStack { /* overlapping */ }
Text("Hi")
.font(.title2)
.padding()
.background(Color.blue)
.cornerRadius(12)
Lists & Navigation
List {
ForEach(items) { item in
Text(item.title)
}
.onDelete(perform: delete)
}
NavigationStack {
NavigationLink("Details", destination: DetailView())
.navigationTitle("Home")
}
Async/Await
func loadUser() async throws -> User {
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode(User.self, from: data)
}
.task {
user = try? await loadUser()
}
async let a = fetchA()
async let b = fetchB()
let (ra, rb) = try await (a, b) // run concurrently