XCode 更新到 6.3 后,“window”类型的可选性与协议“uiapplicationdelegate”所要求的不同

Posted

技术标签:

【中文标题】XCode 更新到 6.3 后,“window”类型的可选性与协议“uiapplicationdelegate”所要求的不同【英文标题】:type of 'window' has different optionality than required by protocol 'uiapplicationdelegate' after XCode update to 6.3 【发布时间】:2015-04-13 11:08:49 【问题描述】:

我的 AppDelegate 中有此代码 var window = UIWindow()。我的应用程序以前运行良好。在我将 XCode 更新到 6.3 后,我无法再在模拟器中运行我的 ios 应用程序,因为我收到了错误

“窗口”类型的可选性与协议要求的不同 'uiapplicationdelegate'

【问题讨论】:

因为它现在:var window: UIWindow?但是您应该使用 Edit -> Convert -> To Latest Swift Syntax 转换为最新的 Swift 语法以避免这些类型的错误。 您输入的代码是我在 Swift 中创建应用程序时的默认代码。我更改为上面的代码,因为我收到错误fatal error: unexpectedly found nil while unwrapping an Optional value 并使用了window! (eg window!.frame = .. 你在 AppDelegate 中使用了那个代码,那个窗口!.frame....? 我在func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool中使用了那个代码 【参考方案1】:

感谢您的所有贡献。我不太确定我的代码 window 声明突然不起作用的原因。为了解决这个问题,我使用了这里的答案:https://***.com/a/25482567/2445717

我将窗口的声明恢复为默认值:var window: UIWindow?

然后将下面的代码用于didFinishLaunchingWithOptions

    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    if let window = window 
        window.backgroundColor = UIColor.whiteColor()
        window.rootViewController = ViewController()
        window.makeKeyAndVisible()
    

【讨论】:

【参考方案2】:

在 Swift 2 中,AppDelegate 有:

var window: UIWindow?

而不是

var window: UIWindow

因为它应该为零

你可以使用惰性变量来简单地编写代码

lazy var window: UIWindow? = 
    let win = UIWindow(frame: UIScreen.mainScreen().bounds)
    win.backgroundColor = UIColor.whiteColor()
    win.rootViewController = UINavigationController(rootViewController: self.authViewController)
    return win
()

【讨论】:

【参考方案3】:

如果您在代码的类定义中 cmd-单击单词 UIApplicationDelegate,您将打开协议定义。我怀疑你正在使用这个调用:

  func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) ...

这在 Swift 1.2 中可能已经改变,但似乎没有被广泛记录。如果你写了

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) ...

然后您会收到您报告的错误消息。

Daniel Nagy 提到的自动化程序没有解决这个特殊问题 - 我遇到了类似的问题。

如果您提供了该可选函数,则只需在函数定义中的UIWindow 之后添加?

【讨论】:

以上是关于XCode 更新到 6.3 后,“window”类型的可选性与协议“uiapplicationdelegate”所要求的不同的主要内容,如果未能解决你的问题,请参考以下文章

swift 1.2 / xcode 6.3 更新后未调用获取的结果控制器委托

Xcode 6.3 不再打开仪器

打开管理器时 xcode 6.3 挂起

AppDelegate 应用程序功能中的 Facebook SDK 错误,即使在 Xcode 6.3 中更新了 Facebook

在 xcode 6.3 版中更改文本大小

UITableViewAutomaticDimension 在 Xcode 6.3 中不起作用