Declarative UI clicked faster than expected

Coming from Spring Boot, thinking in terms of "state produces UI" rather than manually mutating views felt closer to reactive backend patterns than I expected. A view is just a function of its state: update the state, the view redraws itself.

struct CounterView: View {
    @State private var count = 0

    var body: some View {
        VStack {
            Text("\(count)")
            Button("Increment") { count += 1 }
        }
    }
}

State management is the real learning curve

@State, @Published, ObservableObject. The syntax is small, but the mental model of "mutation triggers a redraw" takes longer to internalize than the keywords themselves, especially coming from backend code that deliberately avoids mutable shared state.

The parts that felt like backend work anyway

Codable for JSON parsing was immediately familiar. The same problem Jackson solves in Java, just different syntax. URLSession is an HTTP client wearing a different outfit. None of that was the hard part.

What's genuinely different

The App Store review process: a human reviews the app before every release, on a timeline you don't control, unlike a CI pipeline you own end to end. Provisioning profiles and signing certificates took longer to get right than any line of Swift.

🎯 Takeaway
The language and UI paradigm were the easy part. The platform's review and distribution model was the actual learning curve, and no tutorial mentions that upfront.