Swift:从Utilities类调用UIAlertController

时间:2017-03-30 19:14:39

标签: ios swift function class uialertcontroller

我目前正在努力学习并提升我作为Swift开发人员的技能,这可能是一个愚蠢的问题,但我很好奇。

问题
在我的代码中,我不断重复UIAlertController创建和演示代码,以至于看起来很草率。同时将它调度到主线程,它最多需要5行,并且我在多个视图控制器上多次在我的项目中重复此代码。所以我创建了一个“Utilities”类,在该类中我有一个显示UIAlertController的函数。

问题
我想知道的是,这是一种糟糕的编码习惯吗?从另一个类不断调用这个函数是不是很草率,不断创建一个新的UIAlertController?这会减慢我的申请吗?或者这完全没问题?

代码意义重大:

class Utils {

func displayError(viewController: UIViewController, title: String, message: String, action: UIAlertAction?) {
    let ac = UIAlertController(title: title,
                               message: message,
                               preferredStyle: .alert)

    if action == nil {
        ac.addAction(UIAlertAction(title: "Ok", style: .cancel))
    } else {
        ac.addAction(action!)
    }

    DispatchQueue.main.async {
        viewController.present(ac, animated: true)
    }
}
}

先谢谢你。

2 个答案:

答案 0 :(得分:1)

对于Swift 5,iOS 13 *

含解决:iOS 13.0中不推荐使用“ keyWindow”

我希望将消息保存在单独的类function render_product_description($item_id, $item, $order){ $_product = $order->get_product_from_item( $item ); echo "<br>" . $_product->post->post_content; echo "<br>"; echo '<p><strong>Time:</strong><br />'; echo get_post_meta($_product->id, 'time', true) .'</p>'; echo '<p><strong>Category:</strong><br />'; echo wp_get_post_terms($_product->id, 'product_cat', true) .'</p>'; echo '<p><strong>Date:</strong><br />'; echo get_post_meta($_product->id, 'date', true) .'</p>'; } add_action('woocommerce_order_item_meta_end', 'render_product_description',10,3); 中,并从各种VC进行调用。 根据Youssef和How to resolve: 'keyWindow' was deprecated in iOS 13.0

的回答
class GlobMessage: UIAlertController {

答案 1 :(得分:0)

您可以使用窗口的rootviewcontroller属性来显示警报,而不是将视图控制器作为参数传递。这是一个例子:

class Utils {

    static func displayAlert(title: String, message: String) {

        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let defaultAction = UIAlertAction(title: "Default", style: .default, handler: nil)
        alertController.addAction(defaultAction)

        guard let viewController = UIApplication.shared.keyWindow?.rootViewController else {
            fatalError("keyWindow has no rootViewController")
            return
        }

        viewController.present(alertController, animated: true, completion: nil)
    }

}

不要忘记将您的函数定义为静态,以便能够以这种方式调用它:

Utils.displayAlert(title: "Hello", message: "This is an alert")