【问题标题】:Swift: Function with inout-ClosureSwift:带有 inout-Closure 的函数
【发布时间】:2018-07-28 08:07:08
【问题描述】:

我有以下结构:

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 抛出错误:

没有更多上下文的表达类型是模棱两可的

有谁知道,如何解决这个问题?

期待您的回复!

【问题讨论】:

  • 我相信 Swift 4.0.3 中改变了 inout 闭包参数的行为。您使用的是哪个版本的 Swift?另外,editMyStruct 是否还有其他重载?它对我来说很好用(Swift 4.0.3 版,在 REPL 中测试)。
  • @Palle Argh!真丢人。我注意到由于具有相同签名的另一个函数而引发了上述错误......是的,你是对的,上面的代码工作正常;)

标签: swift closures inout


【解决方案1】:

找到答案了!

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

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

编辑

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

【讨论】:

  • 没必要,你问题中的代码编译得很好。
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 2014-12-04
相关资源
最近更新 更多