2014-09-04 18 views
11

代码:值可选类型CGFloat的未展开误差的斯威夫特

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

我尝试创建一个UIView progrmatically.when尝试设置窗口的高度和宽度视图提示错误为“任选的类型“的价值CGFloat的?”不打开;你的意思是使用'!'要么 '?'?” ? 为什么这个错误显示任何帮助,将提前

回答

25

appreciated.thanks您正在使用optional chaining,这意味着self.window?.frame.width计算为一个有效的整数,如果windownil,否则计算结果为nil - 同为height

既然你不能让一个CGRectnil(或更好说,CGRectMake不接受可选的它的任何参数),编译器报告,作为一个错误。

的解决方案是隐含解开self.window

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

这又引出一个运行时错误的事件self.windownil。它总是一个更好的做法是围绕与一个可选的绑定:

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

让您确定视图中创建只有self.window其实不是零。

+0

thanks.it解决了我的问题 – user3823935 2014-09-04 11:09:28

相关问题