Swift:带有 inout 闭包的函数

标签 swift closures inout

我有以下结构:

struct MyStruct {
    var myInt: Int
    var myString: String
}

应该在如下函数中编辑该结构:

func editMyStruct(action: (inout MyStruct) -> ()) {
    var mutableMyStruct = MyStruct(myInt: 10, myString: "Foo")
    action(&mutableMyStruct)
    //do something with the modified 'mutableMyStruct' ...
}

但是,我确实很难调用 editMyStruct(action: (inout MyStruct) -> ())

editMyStruct(action: { myStruct in
    myStruct.myInt = 20
    myStruct.myString = "Bar"
})

XCode 抛出错误:

Type of expression is ambiguous without more context

你们有人知道如何解决这个问题吗?

期待您的回复!

最佳答案

找到答案了!

editMyStruct(action: (inout MyStruct) -> ()) 的语法必须是:

editMyStruct(action: { (myStruct: inout MyStruct) in
    myStruct.myInt = 20
    myStruct.myString = "Bar"
})

编辑

啊啊!我真丢脸。我注意到由于具有相同签名的另一个函数而引发了上述错误...上面的代码很好;)

关于Swift:带有 inout 闭包的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48843298/

相关文章:

ios - 如何在 swift 中访问嵌套 JSON 对象内的值?

python - 如何从回调函数访问(和编辑)变量?

animation - 快速访问函数内部闭包的变量

arrays - 更新通过引用传递的数组中的项目

ios - Swift 4.2 中带有 JSON 数据的 TableView

Swift REALM - 按距离排序,过滤并仅存储唯一值

javascript闭包为什么我得到var undefined

kotlin - 在Kotlin中,如何检查输入是否仅为字母

swift - Inout 不使用 SubClass 对象抛出无法将不可变值作为 inout 参数传递

ios - 关于 Analytics 屏幕报告的 Firebase Analytics 错误