Void) { function() } var my" /> Void) { function() } var my" /> Void) { function() } var my"/>

How is passing a function as a parameter related to escaping autoclosure?

44 Views Asked by At
struct MyStruct {
    var a = 0
    
    func foo() {
        print("Ok")
    }
    
    mutating func increase() {
        a += 1
    }
}

func runner(_ function: () -> Void) {
    function()
}

var myStruct = MyStruct()
runner(myStruct.foo) // Ok
runner(myStruct.increase)
//  Escaping autoclosure captures 'inout' parameter 'self'

Where is autoclosure here? And why is it escaping?

1

There are 1 best solutions below

2
Roman On
func runner(_ function: @autoclosure () -> Void) {
    function()
}

var myStruct = MyStruct()
runner(myStruct.foo()) // Ok
runner(myStruct.increase()) // ✅ Ok

Not ideal, but better than "impossible"