Comments (2)
Hey @zrfrank
Publishers in Combine maintain type information as you chain them. In the following example, the publisher
variable will have the type Publishers.Debounce<Publishers.Delay<Just<Int>, RunLoop>, RunLoop>
:
let publisher = Just<Int>(10)
.delay(for: .seconds(1), scheduler: RunLoop.main)
.debounce(for: .seconds(1), scheduler: RunLoop.main)
So if we need to return this value from a function, we'd have to specify the full type information as the return type of the function. This would be crazy inconvenient and would lead to tight coupling between the function implementation and the consumers of this function: every time you change this chain of operators (even by swapping delay
and debounce
), the resulting type changes, so you'll have to update not only the public function's declaration but also all the places in your app calling it.
Just the same problem exists for SwiftUI views: the resulting view type might be insanely long for exposing this as the return type. That's why in Swift 5 there is some
keyword, which maintains the entire static type information for the compiler but obscures it for the human.
We could have used some
keyword approach with publishers as well, but:
some
does not allow you to specify the associated parameters. SwiftUI views do not have those, while publishers haveValue
andError
- Maintaining the type information is essential for SwiftUI views: this allows the drawing engine to perform the hierarchy diffing in a faster manner. Publishers don't require anything like that, so type information can be safely erased.
I hope my explanation makes sense - let me know if any clarification is needed.
from clean-architecture-swiftui.
Thanks! Really excellent explanations!
from clean-architecture-swiftui.
Related Issues (20)
- Typo: TextField spelling HOT 1
- Cannot connect to REST API HOT 4
- How to save related CoreData objects? HOT 1
- Something wrong with @Builder and @resultBuilder !!! HOT 1
- How to get value from LoadableSubject? HOT 1
- Why does the '.onReceive(routingUpdate)' perform twice? HOT 1
- Project does not build in Xcode 13.2; Internal error: missingPackageDescriptionModule HOT 2
- Question: why `case .isLoading` is not called even we got `.isLoading` on didSet? HOT 1
- Find by AccessibilityIdentifier HOT 3
- Reseting route state HOT 5
- app crash after select some countires HOT 1
- Would be cool to have the same using SwiftUI Lifecycle
- safearea is not correct HOT 2
- How do I add pagination?
- Question regarding Value: Decodable and Closures
- How do i add interceptor? HOT 1
- Few questions
- CancelBag Strong Reference Cycle HOT 7
- Decouple `Respository` logic HOT 1
- DIContainer conforming EnvironmentKey - can't find its usage HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from clean-architecture-swiftui.