如何在自定义函数中添加函数作为参数 - 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 将被取消