Как установить свойство UIWindow в Swift

#swift

#swift

Вопрос:

Я пытался внести простое изменение в границы UIWindow в Swift. Пока у меня есть:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions:NSDictionary?) -> Bool {
    // Override point for customization after application launch.


    //SHIFT EVERYTHING DOWN - THEN UP IN INDIV VCs IF ios7>
    var device:UIDevice=UIDevice()
    var systemVersion:String=device.systemVersion
    println(systemVersion)
    //Float(systemVersion)

    if (systemVersion >= "7.0") {
        UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
        self.window.setClipsToBounds = true // --> Member doesnt exist in UIWindow
        self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height);
        self.window.bounds = CGRectMake(0,0, self.window.frame.size.width, self.window.frame.size.height);
    //}

    let ok = true
    println("Hello World")
    return true
}
  

но я получаю:

У UIWindow нет имени члена в каждой строке self.window.property setter.

Ответ №1:

Проблема в том, что self.window это необязательно. Сначала вам нужно «развернуть» его. Вам также необходимо использовать clipsToBounds not setClipsToBounds .:

 if let window = self.window {
    window.clipsToBounds = true
    window.frame = CGRect(x: 0, y: 20, width: window.frame.size.width, height: window.frame.size.height);
    window.bounds = CGRect(x: 0, y: 0, width: window.frame.size.width, height: window.frame.size.height);
}
  

Примечание: я также обновил CGRectMake до предпочтительного быстрого способа создания CGRect с использованием инициализатора CGRect вместо глобальной CGRectMake функции.

Ответ №2:

В классе AppDelegate window является необязательной переменной. Вам нужно принудительно развернуть переменную с помощью ! .

Например,

 self.window!.clipsToBounds = true
  

Если вы не знакомы с тем, как работают опции в Swift, ознакомьтесь с документацией Apple о них.

Комментарии:

1. Вау! И здесь я подумал, что Swift должен был сделать кодирование более эффективным. Спасибо!