闭包中的Inout参数(Swift)

时间:2014-12-11 11:51:14

标签: ios arrays swift closures

我想调用一个带有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中的这个问题?

2 个答案:

答案 0 :(得分:0)

试试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

答案 1 :(得分:0)

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真的是{{1}}只是一个数组?或者它是一个包含数组的可选项,因为否则它不需要!强制解包它...)