there's only one possible type that wrappedValue can be, which is Namespace.ID so there's no ambiguity what type namespace is
@propertyWrapper struct Foo {
var wrappedValue: Int = 0
}
struct Bar {
@Foo var test1
@Foo var test2: Int
// @Foo var test3: String // error: Property type 'String' does not match that of the 'wrappedValue' property of its wrapper type 'Foo'
}
print(Bar().test1) // prints 0
Thank you. So this is simply an improvement in the type inference algorithm in Swift 5.3?
With Swift 5.2.4 (Xcode 11.5) I get the error-message Type annotation missing in pattern.
What you're seeing here is default initialization of a property wrapper, which allows the wrapped property type to be inferred when possible. The ability to drop the type annotation from a default-initialized property wrapper was introduced in 5.3 (https://github.com/apple/swift/pull/30663), but this was previously supported by adding empty parentheses after the property wrapper attribute (e.g. @Namespace() var namespace). You can support this in your own property wrappers by providing a default initializer.