All bites
The whole library, newest first. Filter by what you are here for, or pick a topic if you already know.
8668 bites
Page 72
XCFrameworks and Binary Distribution Trade-offs
XCFramework bundles slices for multiple platforms/architectures, used to hide source or speed builds.
Decoupled Cross-Module Navigation in Modular iOS
Depend on a shared abstraction, register concrete routers in a coordinator or registry, resolve at runtime.
Resolving Conflicting Transitive Versions in SPM
SPM allows only one version per package, so diagnose the graph, then update, pin, or fork to find an overlap.
Making a Legacy UIViewController Testable
Extract logic into a testable view model, inject dependencies, keep the controller a thin humble object.
setUp() and tearDown() in XCTestCase
SetUp builds fresh state before each test, tearDown cleans up after, ensuring independence.
Generating Video Thumbnails with AVAssetImageGenerator
Load AVAsset, configure AVAssetImageGenerator, request the time off the main thread, hop back to update UI.
Building a Card Flip Animation in SwiftUI
Drive a flipped state, rotate both faces with rotation3DEffect, hide the back face.
Push vs Modal Presentation in UIKit
Push adds to a nav stack with back, modal presents a self-contained interrupting flow.
IBOutlet vs IBAction in Interface Builder
Outlet references a view, action handles an event, both connect via Ctrl-drag.
Protocols with associated types and opaque types
A PAT leaves a placeholder type unresolved, so it has no single concrete shape and historically could not be used as a bare existential; opaque types with some let you return one fixed underlying conforming…
do-try-catch versus Optional return types
Throwing functions with do/try/catch convey why something failed via typed Error values; Optionals only say success or absence. Use throws when the caller needs the reason.
Closures and trailing closure syntax
Closures are self-contained function blocks that capture surrounding state; a final closure parameter can be passed as a trailing closure outside the parentheses.
Purpose of the guard statement
Guard requires its condition to hold or else exits the scope, and unwrapped optionals stay in scope afterward; this flattens nesting versus if.
Retain cycles and how to break them
A cycle is two objects (or a closure and its owner) holding mutual strong references so neither deallocates; break it with a [weak] or [unowned] capture list.
Decoding a heterogeneous JSON array by a type field
Peek the type field with a partial decode, switch on it, and decode the concrete type, wrapping each in an enum or boxed protocol value.
Minimizing Storyboard merge conflicts
Split into many small storyboards or xibs, or move to programmatic or SwiftUI layout; process-wise coordinate ownership and merge often.
Faulting in Core Data
A fault is a placeholder object whose property data is not yet loaded; accessing a property fires the fault and fetches from the store, saving memory.
View identity in SwiftUI and the .id() modifier
Identity links a view to its persistent state and transitions; structural identity comes from position, explicit identity from .id(); changing the id resets state and forces a new view.
Copy-on-write and implementing it for a custom struct
CoW shares a buffer until mutation, deep-copying only when the buffer is non-unique; Array, Dictionary, Set, String use it; implement with a class storage box and isKnownUniquelyReferenced.
map versus compactMap versus flatMap
Map transforms each element one-to-one; compactMap transforms then drops nils; flatMap transforms to sequences then concatenates.