是什么导致我的 AppDelegate 中的 self 未定义?

What is causing self to be undefined in my AppDelegate?

我已经在一个应用程序上工作了几个星期,然后进行了一次重大重构,但不知何故破坏了我的应用程序委托。

如果我在 applicationDidFinishLaunchingWithOptions 中放置一个断点,然后键入 p self,我会看到以下错误:

error: <EXPR>:1:1: error: use of unresolved identifier 'self'
self
^

如果我在 applicationDidBecomeActive 中放置一个断点并输入 p self 那么我不会收到任何错误并且 self 似乎是正确的 "defined"。

如果我从一个新项目开始我就不会遇到这个问题。

我的AppDelegate.swift如下:

import UIKit
import CoreLocation

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

         return true
    }

}

"self" 对于表达式求值器来说比您天真地认为的要棘手。它不能只告诉编译器有关变量的信息,它必须让编译器相信表达式中的代码在方法上下文中是 运行,无论 class "self" 恰好是什么,然后编译器会推断出 self 的存在。否则像 bare ivar 访问和方法调用之类的东西将无法工作。

最初这个小两步有很多问题,但这些问题应该由 Xcode 7 解决。如果您在 Xcode 7 中看到这个问题,请提交错误我们来看看。

所以我在Xcode 7 试了一下,我可以p self 成功。

然后我切换回 Xcode 6,p self 又开始工作了。

几乎确认这是一个错误,解决方法是 运行 您在 Xcode 7 中的项目,而不更新您的语法(我不得不暂时注释掉一些无法编译的代码Xcode7),然后切换回Xcode6.