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 更新后未调用获取的结果控制器委托
AppDelegate 应用程序功能中的 Facebook SDK 错误,即使在 Xcode 6.3 中更新了 Facebook