📜  从 viewcontroller 快速访问 appdelegate - Swift (1)

📅  最后修改于: 2023-12-03 14:49:19.838000             🧑  作者: Mango

从 ViewController 快速访问 AppDelegate - Swift

在Swift中,我们经常需要从ViewController访问AppDelegate的一些属性或方法。本文将介绍一些快速方便的方法来访问AppDelegate。

使用UIApplication.shared

UIApplication.shared是一个单例对象,可用于访问应用程序的共享资源。它可以访问AppDelegate并访问其属性或方法。

// 获取AppDelegate对象
let appDelegate = UIApplication.shared.delegate as! AppDelegate

// 访问AppDelegate的属性或方法
appDelegate.someProperty
appDelegate.someMethod()
使用protocol

在Swift中,我们可以使用protocol来扩展UIApplicationDelegate并实现需要的方法。这种方法可以避免类型转换(as!)。

// 定义协议
protocol AppDelegateProtocol {
    var someProperty: String { get set }
    func someMethod()
}

// 扩展UIApplicationDelegate
extension AppDelegate: AppDelegateProtocol {
    var someProperty: String {
        return "Hello, World"
    }

    func someMethod() {
        print("Some method is called")
    }
}

// 在ViewController中调用
class ViewController: UIViewController {
    func callMethod() {
        if let appDelegate = UIApplication.shared.delegate as? AppDelegateProtocol {
            appDelegate.someMethod()
        }
    }
}
使用协议委托(delegate)

我们还可以使用协议委托(delegate)来访问AppDelegate的属性或方法。这种方法需要先定义一个协议,并在AppDelegate中实现它。然后,在ViewController中将它的实例化对象赋给AppDelegate的delegate属性。

// 定义协议
protocol AppDelegateDelegate {
    func someMethod()
}

// 在AppDelegate中实现协议方法
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    var delegate: AppDelegateDelegate?

    func someMethod() {
        print("Some method is called")
    }
}

// 在ViewController中实例化对象并赋值
class ViewController: UIViewController, AppDelegateDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()

        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.delegate = self
    }

    func someMethod() {
        print("Delegate method is called")
    }
}

通过这种方式,我们可以使用协议委托(delegate)来访问AppDelegate的属性或方法。

结论

本文介绍了三种方法来从ViewController快速访问AppDelegate。使用这些方法可以帮助我们更方便地管理iOS应用程序中的共享资源。