簡體   English   中英

閉包中的Inout參數(Swift)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM