如何在Swift中获得对应用程序委托的引用?

时间:2014-06-04 19:42:25

标签: swift

如何在Swift中获得对app delegate的引用?

最终,我想使用该引用来访问托管对象上下文。

18 个答案:

答案 0 :(得分:673)

另一个解决方案是正确的,因为它将为您提供对应用程序委托的引用,但这不允许您访问由UIApplication的子类添加的任何方法或变量,例如您的托管对象上下文。要解决这个问题,只需向下转换为" AppDelegate"或者你的UIApplication子类恰好被调用了什么。像这样:

Swift 3.x(Xcode 8引入)

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let aVariable = appDelegate.someVariable

Swift 1.2 - 2.x(Xcode 6.3引入)

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let aVariable = appDelegate.someVariable

斯威夫特< 1.2

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let aVariable = appDelegate.someVariable

答案 1 :(得分:36)

Swift 4.2

在Swift中,很容易在VC中访问

extension UIViewController {
    var appDelegate: AppDelegate {
    return UIApplication.shared.delegate as! AppDelegate
   }
}

答案 2 :(得分:17)

便利构造商

  

在代码末尾添加AppDelegate类

Swift 3& 4

func appDelegate () -> AppDelegate
{
    return UIApplication.shared.delegate as! AppDelegate
}

要在班级中使用AppDelegate引用吗?

  

调用AppDelegate方法

     

的appDelegate()。setRoot()

答案 3 :(得分:16)

与Objective-C

几乎相同
let del = UIApplication.sharedApplication().delegate

答案 4 :(得分:15)

这可以用于OS X

let appDelegate = NSApplication.sharedApplication().delegate as AppDelegate
var managedObjectContext = appDelegate.managedObjectContext?

答案 5 :(得分:11)

这是Swift 2.0版本:

let delegate = UIApplication.sharedApplication().delegate as? AppDelegate

访问托管对象上下文:

    if let delegate = UIApplication.sharedApplication().delegate as? AppDelegate {

        let moc = delegate.managedObjectContext

        // your code here

    }

或者,使用警卫:

    guard let delegate = UIApplication.sharedApplication().delegate as? AppDelegate  else {
        return
    }

    let moc = delegate.managedObjectContext

    // your code here

答案 6 :(得分:10)

来自这里的公寓,在我的情况下,我错过了进口UIKit:

{{1}}

答案 7 :(得分:9)

SWIFT< 3

在AppDelegate Class中为ex

创建一个方法
func sharedInstance() -> AppDelegate{
        return UIApplication.sharedApplication().delegate as! AppDelegate
    }

并将其称为ex

的其他地方
let appDelegate : AppDelegate = AppDelegate().sharedInstance()

SWIFT> = 3.0

func sharedInstance() -> AppDelegate{
    return UIApplication.shared.delegate as! AppDelegate
}

答案 8 :(得分:4)

1)确保import UIKit

2)let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate

答案 9 :(得分:4)

以下是AppDelegate的扩展名,可以避免对extension UIApplicationDelegate { static var shared: Self { return UIApplication.shared.delegate! as! Self } } // use like this: let appDelegate = MyAppDelegate.shared // will be of type MyAppDelegate 类名称进行硬编码:

{{1}}

答案 10 :(得分:4)

试试这个:

Swift 4

// Call the method
(UIApplication.shared.delegate as? AppDelegate)?.whateverWillOccur()

AppDelegate中的位置:

// MARK: - Whatever
func whateverWillOccur() {

    // Your code here.

}

答案 11 :(得分:2)

非常简单

App委托实例

let app = UIApplication.shared.delegate as! AppDelegate

您可以使用一行语法

调用方法
app.callingMethod()

您可以使用此代码访问变量

app.yourVariable = "Assigning a value"

答案 12 :(得分:1)

就我而言,我在import UIKit子类的顶部缺少NSManagedObject。 导入后,我可以删除该错误,因为UIApplication是<{1}}

的一部分

希望它可以帮助别人!!!

答案 13 :(得分:1)

我在Swift 2.3中使用它。

1.in AppDelegate class

static let sharedInstance: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

2.Call AppDelegate with

let appDelegate = AppDelegate.sharedInstance

答案 14 :(得分:1)

extension AppDelegate {

    // MARK: - App Delegate Ref
    class func delegate() -> AppDelegate {
        return UIApplication.shared.delegate as! AppDelegate
    }
}

答案 15 :(得分:0)

在Swift 3.0中,您可以通过

获取appdelegate引用
let appDelegate = UIApplication.shared.delegate as! AppDelegate

答案 16 :(得分:0)

从iOS 12.2和Swift 5.0开始,AppDelegate不是公认的符号。 UIApplicationDelegate是。因此,所有引用AppDelegate的答案都不再正确。以下答案是正确的,并且避免了一些开发人员认为代码有异味的强制展开:

import UIKit

extension UIViewController {
  var appDelegate: UIApplicationDelegate {
    guard let appDelegate = UIApplication.shared.delegate else {
      fatalError("Could not determine appDelegate.")
    }
    return appDelegate
  }
}

答案 17 :(得分:-1)

在XCode 6.2中,这也有效

let appDelegate = UIApplication.sharedApplication().delegate! as AppDelegate

let aVariable = appDelegate.someVariable