将全局变量传递给闭包

passing a global variable to a closure

我正在尝试根据操作 sheet 选择实现排序,其中排序发生在处理程序中,但我无法将要排序的数组传递给处理程序。这是我的代码:

let byWage = UIAlertAction(title: "By Wage", style: UIAlertActionStyle.Default, handler: { action in
  unclaimedJobs.sort() { [=10=].wage > .wage }
})

其中 unclaimedJobs 是一个全局变量。执行此操作的最佳方法是什么?

编辑:我在这里声明 unclaimedJobs :

class JobsListViewController: UITableViewController, UITableViewDataSource {

   var jobsList: JobsList!
   var unclaimedJobs: [Job]!

我在viewDidLoad()初始化了它。

编辑#2:我知道您需要将 UIAlertAction 传递给闭包,所以我将 (unclaimedJobs) 替换为 action.

上次编辑:我用 self.unclaimedJobs 代替 unclaimedJobs.

解决了这个问题

不是 100% 确定。不过我觉得是这个。

let byWage = UIAlertAction(title: "By Wage", style: .Default, handler: {(alert: UIAlertAction!) in unclaimedJobs.sort({[=10=] > }) })

如果您在闭包中引用一个对象,则需要对其进行显式引用。在你的情况下,它可能是 - self: like in self.unclaimedJobs。但是,你必须在闭包中像 [unowned self] 一样取消拥有这个对象,否则你会发生内存泄漏。