Swift:具有inout-Closure的函数

时间:2018-02-17 16:15:37

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

  

如果没有更多的上下文,表达的类型是不明确的

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

期待您的回复!

1 个答案:

答案 0 :(得分:0)

找到了答案!

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

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

修改

哎呀!对我感到羞耻。我注意到由于具有相同签名的另一个函数而引发了所提到的错误...上面的代码很好;)