SE-0269 allows us to stop using self
in many places where it isn’t necessary. Prior to this change, we’d need to write self.
in any closure that referenced self
so we were making our capture semantics explicit, however often it was the case that our closure could not result in a reference cycle, meaning that the self
was just clutter.
For example, before this change we would write code like this:
struct OldContentView: View {
var body: some View {
List(1..<5) { number in
self.cell(for: number)
}
}
func cell(for number: Int) -> some View {
Text("Cell \(number)")
}
}
That call to self.cell(for:)
cannot cause a reference cycle, because it’s being used inside a struct. Thanks to SE-0269, we can now write the same code like this:
struct NewContentView: View {
var body: some View {
List(1..<5) { number in
cell(for: number)
}
}
func cell(for number: Int) -> some View {
Text("Cell \(number)")
}
}
This is likely to be extremely popular in any framework that makes heavy use of closures, including SwiftUI and Combine.
SPONSORED Join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer! Hurry up because it'll be available only until October 1st.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Download all Swift 5.3 changes as a playground Link to Swift 5.3 changes
Link copied to your pasteboard.