[英]Inout parameter in closure (Swift)
我想调用一个具有inout参数的方法。 在这种方法中有一个闭包。 这是我所做的:
var groups : [Group]
func setup() {
... // add some element to the array...
self.setupUser(user, group: &groups!)
...
}
func setupUser(user: User, inout group: [Group]) {
user.getGroup(callBack: ({(aGroup:Group) in
group[0] = aGroup
}))
}
但是,在我调用setupUser方法之后,数组[0]的第一个元素没有改变。 我认为问题在于我在闭包中使用了inout参数,但是如何在Swift中解决此问题?
尝试group.append(aGroup)
。 那对我有用。
操场:
import Cocoa
struct Group {
var name:String
}
class User {
var name:String
init() {
name = ""
}
func setupUser(user:User, group:[Group]) {
}
func getGroup (callBack: (Group) -> ()) {
println("call")
callBack(Group(name: "Test"))
println("back")
}
}
var groups = [Group]()
var user = User()
func setup() {
setupUser(user, &groups)
}
func setupUser(user: User, inout group: [Group]) {
println("hi")
user.getGroup(({(aGroup:Group) in
println(group)
println(aGroup)
group.append(aGroup)
}))
}
setup()
groups
inout变量应在闭包内分配:
struct Group {
let value: Int
}
struct User {
func getGroup(callback: Group->()) {
callback(Group(value: 2))
}
}
var groups: [Group] = [Group(value: 1)]
func setup() {
setupUser(User(), &groups)
}
func setupUser(user: User, inout group: [Group]) {
user.getGroup { aGroup in
// assigns to the inout variable
group[0] = aGroup
}
}
groups[0] // a Group with value = 1
setup()
groups[0] // now a Group with value = 2
我认为您的实际问题可能出在您未包含在帖子中的代码的一部分中,因为您发布的内容无法按原样工作(例如,在您的实际代码中, groups
实际上只是一个数组吗?或者是一个包含数组的可选内容,因为否则它不需要!来强制拆开它。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.