2014-10-04 81 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