如何在自定义函数中添加函数作为参数 - swift?
How to add a function as a parameter in a custom function - swift?
我正在尝试重构我的 UIAlertViewController
并传递一个函数,当用户选择点击触发操作的两个选项之一时要执行的函数。
我的问题是如何将函数作为参数添加到自定义函数?我的努力在下面。它不完整,但任何指导将不胜感激。我想将函数 'performNetworkTasl' 作为 'showBasicAlert'.
的参数
import Foundation
import UIKit
struct Alerts {
static func showBasicAlert(on vc: UIViewController, with title: String, message: String, function: ?????){
let alert = UIAlertController.init(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction.init(title: "OK", style: .default) { (UIActionAlert) in
performNetworkTasl()
vc.dismiss(animated: true, completion: nil)
}
alert.addAction(okAction)
}
}
func performNetworkTasl(){
// DO SOME NETWORK TASK
}
您不会像这样传递函数,而是将闭包作为参数传递。 swift 中的函数是闭包的特例。闭包可以假设为匿名函数。闭包、即时方法和静态方法除了明显的语法差异外,它们的区别仅在于上下文捕获能力。
struct Alerts {
static func showBasicAlert(on vc: UIViewController, with title: String, message: String, okAction: @escaping (() -> ())){
let alert = UIAlertController.init(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction.init(title: "OK", style: .default) { (UIActionAlert) in
okAction()
//dismiss statement below is unnecessary
vc.dismiss(animated: true, completion: nil)
}
alert.addAction(okAction)
}
}
并且您将函数称为
Alerts.showBasicAlert(on: your_viewController, with: "abcd", message: "abcd", okAction: {
//do whatever you wanna do here
})
希望对您有所帮助
顺便说一句,您不必在任何操作中将明确的 vc.dismiss(animated: true, completion: nil)
作为最后一个语句,一旦触发操作,默认情况下 UIAlertController
将被取消
我正在尝试重构我的 UIAlertViewController
并传递一个函数,当用户选择点击触发操作的两个选项之一时要执行的函数。
我的问题是如何将函数作为参数添加到自定义函数?我的努力在下面。它不完整,但任何指导将不胜感激。我想将函数 'performNetworkTasl' 作为 'showBasicAlert'.
import Foundation
import UIKit
struct Alerts {
static func showBasicAlert(on vc: UIViewController, with title: String, message: String, function: ?????){
let alert = UIAlertController.init(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction.init(title: "OK", style: .default) { (UIActionAlert) in
performNetworkTasl()
vc.dismiss(animated: true, completion: nil)
}
alert.addAction(okAction)
}
}
func performNetworkTasl(){
// DO SOME NETWORK TASK
}
您不会像这样传递函数,而是将闭包作为参数传递。 swift 中的函数是闭包的特例。闭包可以假设为匿名函数。闭包、即时方法和静态方法除了明显的语法差异外,它们的区别仅在于上下文捕获能力。
struct Alerts {
static func showBasicAlert(on vc: UIViewController, with title: String, message: String, okAction: @escaping (() -> ())){
let alert = UIAlertController.init(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction.init(title: "OK", style: .default) { (UIActionAlert) in
okAction()
//dismiss statement below is unnecessary
vc.dismiss(animated: true, completion: nil)
}
alert.addAction(okAction)
}
}
并且您将函数称为
Alerts.showBasicAlert(on: your_viewController, with: "abcd", message: "abcd", okAction: {
//do whatever you wanna do here
})
希望对您有所帮助
顺便说一句,您不必在任何操作中将明确的 vc.dismiss(animated: true, completion: nil)
作为最后一个语句,一旦触发操作,默认情况下 UIAlertController
将被取消