ios - (UIApplication.sharedApplication().delegate 作为 AppDelegate).managedObjectContext

标签 ios swift

我读到这行代码从 AppDelegate 获取托管对象上下文。

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

我阅读了每个单词的 Apple 文档,尝试重建上面提到的正确的整体输出含义。 谁能清楚详细地解释一下这行语法的含义?

最佳答案

首先访问 UIApplication 类。

这是一个单例。它只有一个实例,是在应用程序启动时由 cocoa touch 框架创建的。

然后,您可以通过调用类方法 sharedApplication 来访问其唯一的实例。 “shared(classname)”是返回单例实例的方法的通用名称。另一个常见名称是“sharedInstance”。

然后您访问其委托(delegate)。这遵循您在使用 cocoa touch 开发 iOS 应用程序时经常看到的常见委托(delegate)模式。但这是您拥有的一个非常特殊的代表。它是AppDelegate 类。 当您让 Xcode 使用核心数据创建新的应用程序项目时,它会在您的 AppDelegate 类中创建一些标准方法以方便您使用。

其中之一是managedObjectContext的(计算的)getter。

但是,UIApplication 仅将其委托(delegate)视为实现 UIApplicationDelegate 协议(protocol)的任何对象。 UIApplication 不知道核心数据的附加方法。

这就是为什么您必须将 .sharedApplication() 的输出转换为名为 AppDelegate 的实现。 as 是 Swift 中的强制转换运算符。

转换后,您实际上可以访问 getter managedObjectContext

就是这样。

关于ios - (UIApplication.sharedApplication().delegate 作为 AppDelegate).managedObjectContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33521401/

相关文章:

ios - iOS 9 上不显示 UITextView 返回键类型的更改

ios - 缩小以显示用户位置/注释

ios - 试图升级到 Swift 1.2 时出现令人困惑的编译错误

ios - 核心数据如何过滤(NSPredicate)包括关系需求和给定的关系对象?

ios - Swift 和 Sprite 套件接触不正确

swift - 如何以编程方式在容器内实现 TableView?

ios - 上下文类型 'NSFastEnumeration' 不能与数组文字一起使用

ios - SecureUDID 有没有人广泛测试过它?

ios - 将 AdMob 添加到 Firebase 项目时崩溃

html - `flex` 在移动设备上的显示与桌面不同