如何将更多参数传递给UIAlertAction的处理程序?

时间:2016-01-26 02:05:27

标签: ios swift uialertcontroller uialertaction

有没有办法将数组“listINeed”传递给处理函数“handleConfirmPressed”?我能够通过将其添加为类变量来实现这一点,但这似乎非常hacky,现在我想为多个变量执行此操作,因此我需要更好的解决方案。

library(xml2)
library(rvest)

pg <- read_html("TALHOES_AGENTES.htm")
tab <- html_table(pg, header=TRUE)[[1]]
subset(tab, !(latitude == "0.00000000" | longitude == "0.00000000"))

1 个答案:

答案 0 :(得分:12)

最简单的方法是将一个闭包传递给UIAlertAction构造函数:

func someFunc(){
    //some stuff...
    let listINeed = [ "myString" ]

    let alert = UIAlertController(title: "Are you sure?", message: "message", preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
    alert.addAction(UIAlertAction(title: "Confirm", style: .Destructive, handler:{ action in
        // whatever else you need to do here
        print(listINeed)
    }))
    presentViewController(alert, animated: true, completion: nil)
}

如果您真的想要隔离例程的功能部分,您可以随时放置:

handleConfirmPressedAction(action:action, needed:listINeed)

进入回调块

稍微更模糊的语法,在将函数传递给完成例程和回调函数本身时,将保留函数的感觉,即将handleConfirmPressed定义为curried函数:

func handleConfirmPressed(listINeed:[String])(alertAction:UIAlertAction) -> (){
    print("listINeed: \(listINeed)")
}

然后你可以addAction使用:

alert.addAction(UIAlertAction(title: "Confirm", style: .Destructive, handler: handleConfirmPressed(listINeed)))

请注意,curried函数是:

的简写
func handleConfirmPressed(listINeed:[String]) -> (alertAction:UIAlertAction) -> () {
    return { alertAction in
        print("listINeed: \(listINeed)")
    }
}