If I have a Sendable
type why aren't its methods also @Sendable func
by default?
struct Foo: Sendable {
func bar() { }
}
let foo = Foo()
let fn: @Sendable () -> Void = foo.bar
// ⚠️ Converting non-sendable function value to '@Sendable () -> Void' may introduce data races
The type can automatically fulfil the requirements of a protocol
and then it appears to be a @Sendable func
protocol Barable: Sendable {
@Sendable func bar()
}
extension Foo: Barable { }
let fn: @Sendable () -> Void = (foo as Barable).bar
So is it a @Sendable func
or is the protocol conformance a bug?
I realise you can create a closure inferring @Sendable func
from context but this is not what I am asking about.
let fn: @Sendable () -> Void = { foo.bar() }