2014-09-04 15 views
11

Kod:Wartość opcjonalna typu CGFloat nie nieowiniętym błędu w Swift

var loadView = UIView(frame: CGRectMake(0, 0, self.window?.frame.size.width, self.window?.frame.size.height)) 

próbuję stworzyć UIView progrmatically.when spróbuj ustawić wysokość i szerokość okna do widzenia daje błąd jako „wartość opcjonalnego typu ' CGFloat? " nieopakowany, czy chciałeś użyć "!" lub "?"? " ? dlaczego ten błąd pokazując każda pomoc będzie appreciated.thanks wyprzedzeniem

Odpowiedz

25

używasz optional chaining, co oznacza, że ​​self.window?.frame.width ocenia się liczbą całkowitą, jeśli window nie jest nil, inaczej ocenia się nil - sama dla height.

Ponieważ nie można zrobić CGRect zawierający nil (lub lepiej powiedzieć, CGRectMake nie akceptuje opcjonalny dla któregokolwiek z jego argumentami), kompilator informuje, że jako błąd.

Rozwiązaniem jest niejawnie rozpakować self.window:

var loadView = UIView(frame: CGRectMake(0, 0, self.window!.frame.size.width, self.window!.frame.size.height)) 

Ale to podnosi błąd wykonania w przypadku self.window jest nil. To zawsze lepiej praktyka otoczyć że z opcjonalna oprawa:

if let window = self.window { 
    var loadView = UIView(frame: CGRectMake(0, 0, window.frame.size.width, window.frame.size.height)) 
    .... do something with loadVIew 
} 

dzięki czemu masz pewność, że widok jest tworzony tylko wtedy self.window w rzeczywistości nie jest zerowe.

+0

thanks.it rozwiązał mój problem – user3823935

Powiązane problemy