Implementing it with a property wrapper makes it hard to access self in the initializer, the main reason why I use lazy var. Migrating to Swift Concurrency would be easier with lazy let for the same reasons weak let was added recently.
While I'm not in a rush to get that feature, I do think there is a need here.
"Build your own synchronization primitives" is not a very encouraging answer for a language that wants to do away with concurrency bugs. Having a safe and language-approved solution for dispatch_once (one that is simply not tied to a global like static let has to be) seems like a basic building block that is missing.