将函数作为参数传递与转义自动闭包有何关系?

问题描述 投票:0回答:1
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'

这里

autoclosure
在哪里?为什么它会逃跑?

swift escaping inout auto-close mutating-function
1个回答
0
投票
func runner(_ function: @autoclosure () -> Void) {
    function()
}

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

不理想,但比“不可能”好 🙂

© www.soinside.com 2019 - 2024. All rights reserved.