Build1 distinct publisher3 min readUpdated
A dev.to post pins down a refactor most teams mislabel: only a separate View type adds a node with its own identity and dependencies. Computed properties move text around.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A post on dev.to titled "Breaking Up Big SwiftUI Views the Right Way" draws the line most refactors blur: computed properties organize source code, while separate `View` types can organize the view hierarchy, dependencies, state and update work [1][3]. That matters because the standard cure for the four-hundred-line body nobody wants to open, splitting it into header, content and footer, tends to get described in review as a performance change when it is a readability change [13][2].
The mechanical claim is narrow and checkable. A computed property does not create a new `View` type, a new identity, or an independent dependency-tracking node; it stays part of the enclosing view's `body` evaluation [2]. The `some View` return type does not change that, because the compiler does not promote a property into an independent SwiftUI view node just because it returns an opaque view [8]. So the header/content/footer split adds three symbols to the file and zero nodes to the hierarchy [17].
The article's worked example is the useful part. A `DashboardView` holds `@State private var count` alongside a private `expensiveSection` property that builds a `ForEach(0..<200)` of rows, and when the body is evaluated again, evaluating the `VStack` also evaluates the expression that produces `expensiveSection` [7]. Move the same rows into `private struct ExpensiveSection: View` and SwiftUI gets another node with its own identity and dependencies; if that section does not depend on `count`, changing `count` does not by itself mean the section's body must be updated [9][10].
The author is careful about the ceiling. A separate `View` type does not make SwiftUI faster; it gives you somewhere to establish narrower dependencies and isolate state and work [11]. Use computed properties where they make a view easier to read, and stop treating them as performance boundaries [12].
The framing worth keeping is the dependency one. Apple treats identity, lifetime and dependencies as fundamental to how SwiftUI decides what needs to change and when [4], and according to the post, Apple's documentation says Observation tracks the observable properties actually read during a view's `body` evaluation [6]. A view whose body reads `user.name` depends on `user.name`; a change to `user.email` that the body never reads does not create the same dependency [5]. The question is what data a view depends on, not which large view happens to contain the code [15].
What to watch is the case the post sets up just as the supplied text stops: an `@Observable DashboardModel` carrying `sessions`, `currentStreak`, `isSyncing`, `errorMessage` and `selectedWorkout`, passed whole into a `SummarySection` [14][16]. By the tracking rule above, a subview handed the entire model but reading only `currentStreak` in its body establishes a dependency only on `currentStreak` [18], so the isolation comes from what the body reads rather than from the parameter list. Before extracting anything, check whether the section you are isolating reads state that changes often. If it does, the new type gives you a node without giving you a narrower dependency [10][11].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
A dev.to post headlined "Breaking Up Big SwiftUI Views the Right Way" covers why computed properties help readability, what @ViewBuilder does, and when a separate View type matters.
A computed property does not create a new View type, a new identity, or an independent dependency-tracking node; it is still part of the same enclosing view's body evaluation.
The stated distinction: computed properties organize your source code, while separate View types can organize your view hierarchy, dependencies, state and update work.
The post frames SwiftUI around identity (recognizing something as the same or different across updates), lifetime (associating state with identity) and dependencies (which data a view reads), and says Apple describes these concepts as fundamental to how SwiftUI decides what needs to change and when.
In a UserNameView whose body renders Text(user.name), the Observation system establishes a dependency on user.name because the body reads that property; if user.email changes but body does not read email, that change does not create the same dependency.
The post states that Apple's documentation explains Observation tracks the observable properties actually read during a view's body evaluation.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One self-published explainer, mechanism-only
The core claims are specific, internally consistent and illustrated with compilable-looking code, and the post is careful to distinguish what the refactor does from what it does not do. But everything rests on a single dev.to post: Apple's documentation is paraphrased with no link or version, no measurement or profiling accompanies the ForEach(0..<200) example, no second publisher corroborates, and the captured text is truncated before the article's conclusion.
No adoption signal in the supplied material
The cluster contains no release, deployment, benchmark, usage disclosure, pricing or licensing event — only a tutorial's illustrative code. Nothing indicates how widely the recommended refactor is practised or what it produced in any shipped app, so adoption cannot be scored.
Slightly understated, self-limiting
The post argues in the deflationary direction: it removes a widely held belief (that computed properties create performance boundaries) and then explicitly refuses the obvious overclaim by saying a separate View type does not magically make SwiftUI faster and that passing an observable model is not automatically wrong. Framing sits at or just below what the stated mechanism supports. The gap stays close to zero rather than strongly negative because, with no measurements, the practical size of the benefit is asserted rather than shown.
Low commercial pressure, ordinary audience incentive
Nothing in the supplied text sells a product, SDK, course or service, and no vendor affiliation or sponsorship appears; the framework discussed is Apple's, not the author's. The remaining distortion pressure is the normal one for a self-published developer blog — engagement from a corrective, contrarian-sounding headline — visible in a standfirst that promises a @ViewBuilder explanation the captured body never delivers.
Low-moderate
Confidence is capped by structure rather than by internal contradiction: one publisher, one author, zero measurements, uncited attribution to Apple, no adoption evidence, and a body that breaks off before its conclusion. The descriptive claims about what the post says are highly reliable; the framework-behaviour claims are plausible and mutually consistent but unverified within this cluster.
build
One game, two codebases: where parity belongs when you ship native on iOS and Android1 distinct publisher
build
Judge transactional email on retries and DKIM alignment, not open rates1 distinct publisher
build
Delete one strong_release and Swift leaks 145 MB: ARC as a compile-time contract1 distinct publisher
build
A fanless MacBook turned a thread-scaling sweep into a 54% error, and averaging would not fix it1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 17, 2026