如何在自定义函数-swift中将函数添加为参数?

时间:2018-09-10 07:43:50

标签: ios swift function uialertviewcontroller

我正在尝试重构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
}

1 个答案:

答案 0 :(得分:3)

您不会像这样传递函数,而是会将闭包作为参数传递。快速功能是关闭的特殊情况。可以将闭包假定为匿名函数。闭包,即时方法和静态方法都只是在上下文捕获能力上有所不同,而没有明显的语法差异。

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就会默认关闭