SE-0365 takes another step towards letting us remove self
from closures by allowing an implicit self
in places where a weak self
capture has been unwrapped.
For example, in the code below we have a closure that captures self
weakly, but then unwraps self
immediately:
import Foundation
class TimerController {
var timer: Timer?
var fireCount = 0
init() {
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] timer in
guard let self else { return }
print("Timer has fired \(fireCount) times")
fireCount += 1
}
}
}
That code would not have compiled before Swift 5.8, because both instances of fireCount
in the closure would need to be written self.fireCount
.
SPONSORED Alex is the iOS & Mac developer’s ultimate AI assistant. It integrates with Xcode, offering a best-in-class Swift coding agent. Generate modern SwiftUI from images. Fast-apply suggestions from Claude 3.5 Sonnet, o3-mini, and DeepSeek R1. Autofix Swift 6 errors and warnings. And so much more. Start your 7-day free trial today!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Download all Swift 5.8 changes as a playground Link to Swift 5.8 changes
Link copied to your pasteboard.