Function SWIFT-helper类回调
为了稍微管理/缩短代码,我决定尝试创建一个帮助器类来管理所有警报 其思想是helper类将创建警报。当用户按下按钮时,它将发送一个回调,通知viewController上的代码按下了哪个按钮。基于此,我可以触发不同的代码位 目前,我的代码能够正确弹出警报,但我无法让它在按下按钮时发送回调 这是我迄今为止创建的警报管理器(为了简单起见,仍然是基本的): 在我的代码中,当我想显示警报时,我使用以下代码:Function SWIFT-helper类回调,function,swift,ios8,uialertview,uialertcontroller,Function,Swift,Ios8,Uialertview,Uialertcontroller,为了稍微管理/缩短代码,我决定尝试创建一个帮助器类来管理所有警报 其思想是helper类将创建警报。当用户按下按钮时,它将发送一个回调,通知viewController上的代码按下了哪个按钮。基于此,我可以触发不同的代码位 目前,我的代码能够正确弹出警报,但我无法让它在按下按钮时发送回调 这是我迄今为止创建的警报管理器(为了简单起见,仍然是基本的): 在我的代码中,当我想显示警报时,我使用以下代码: let titleTxt:String = "title txt goes he
let titleTxt:String = "title txt goes here."
let confirmTxt:String = "confirm"
let cancelTxt:String = "cancel"
let msgTxt:String = "some msg goes here."
let showCancel:Bool = true
let showConfirm:Bool = true
let style:UIAlertControllerStyle = .ActionSheet
let alert = alertMgr.showAlert(titleTxt, confirmText: confirmTxt, cancelText: cancelTxt, msgText: msgTxt, showCancel: showCancel, showConfirm: showConfirm, style:style, viewController: self)
switch alert as Int! {
case nil:
println("nil value")
case 0:
println("cancel pressed") //never gets fired. when button is pressed
case 1:
println("confirm pressed") //never gets fired. when button is pressed
default:
break
}
主要的问题是,我似乎无法在按下按钮时回拨发送“myInt”值。我已经用[UIAlertController]搜索了这里几乎所有的问题,但没有找到任何能将我推向正确方向的提示
任何帮助都很好。
showarter
返回myInt
的值在任何给定块有机会执行之前,解决方案是将完整的操作块作为showarter
的参数传递。为了缩短签名,您可以准备一个带有文本、块和标志值的特殊类型,并使用函数处理此类型对象的数组。谢谢您的回复。我不是100%确定我明白了,你能发布一个示例代码来帮助我更好地理解吗?与此同时,我会四处闲逛,看看能不能弄明白。谢谢:)当用户按下按钮时,会调用块actionLeft
和actionRight
,但函数showart
会立即返回-您可以删除返回值,因为它是无用的。相反,您可以使用两个类型为UIAlertAction
的参数来替换actionLeft
和actionRight
请注意,块和闭包之间存在差异,您可以在官方文档中阅读更多内容,但方法是相同的。您可以将任何带有闭包的标准方法作为函数/闭包原型的示例,例如,UIView+animateWithDuration:delay:options:animations:completion:
我想我可能有点困惑。因此,在我从:showarter:中删除返回值并用两个UIAlertAction参数替换actionLeft/actionRight之后。我的VC在哪里发生回调?(这样我就可以根据确认/取消触发下一段代码)在这里感觉有点迷茫。另外,我读了更多关于块/闭包的内容。但是仍然没有100%看到这一点这是最好的部分:在调用showart
之前,在vc
上创建块,在这些块内,您可以调用vc
的任何实例方法,使其类似于委托模式,或者您可以将大部分逻辑放在这些块内,因为它们在vc
的范围内声明,它们可以轻松访问其变量和方法。
let titleTxt:String = "title txt goes here."
let confirmTxt:String = "confirm"
let cancelTxt:String = "cancel"
let msgTxt:String = "some msg goes here."
let showCancel:Bool = true
let showConfirm:Bool = true
let style:UIAlertControllerStyle = .ActionSheet
let alert = alertMgr.showAlert(titleTxt, confirmText: confirmTxt, cancelText: cancelTxt, msgText: msgTxt, showCancel: showCancel, showConfirm: showConfirm, style:style, viewController: self)
switch alert as Int! {
case nil:
println("nil value")
case 0:
println("cancel pressed") //never gets fired. when button is pressed
case 1:
println("confirm pressed") //never gets fired. when button is pressed
default:
break
}