2014-10-04 71 views
2

这里的AppDelegate窗口迅速默认的应用程序代码中Appdelecage.swift关于在迅速

class AppDelegate: UIResponder, UIApplicationDelegate { 
    var window: UIWindow? 
    ... 

谁能告诉我,为什么创建一个可选的VAR窗口?

为什么没有像这样为默认:“”

var window: UIWindow = UIWindow() 

将被节省大量的和“!”

THX

回答

3

UIApplicationMain的工作是看到你的窗口是零,并创建并为你指定一个窗口。我认为这是他们的推理。

但实际上,您可以将问号更改为感叹号。

如果你要提供一个实际的窗口,也将是由你来镜框,因为我在这里做的:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch01p006customWindowInStoryboardApp/ch14p366customWindowInStoryboardApp/AppDelegate.swift

+0

这就是我自Swift发病以来一直在治疗它的原因(我将它翻转为感叹号)。如果某事发生了'application(didFinishLaunchingWithOptions:)'被调用的地方,并且窗口无法以编程方式创建,那么可能会发生一些相当可怕的事情。 – 2014-12-11 14:37:03

-1

var window的声明是为了满足在UIApplicationDelegate协议指定一个可选的声明。你不需要申报,但如果你这样做, 你不应该用你自己的价值来设置它。应用程序将它设置到它自己的窗口,你只应该阅读它。 您仍然需要将其作为可选(UIWindow?)提供,因为协议声明为这样。

编辑: 哎呀,我很抱歉。我被故事板宠坏了,我忘了你实际上可以通过编程创建根窗口。

+0

那么你将如何提供一个子类的UIWindow? – matt 2014-10-04 13:25:35

+0

@matt你说得对,我不知道为什么我忘了这件事。可能应该尽快休息。 – 2014-10-04 13:50:13

+0

故事板中无法覆盖_window_类。关键是,如果你使用的是故事板,你必须配合'UIApplicationMain'为你做的所有事情,正如我在这里解释的:http://www.apeth.com/iOSBook/ch14.html#_the_window – matt 2014-10-04 13:53:13