2014-09-04 24 views
11

Code:Giá trị của tùy chọn loại CGFloat lỗi không quà nào trong Swift

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

tôi cố gắng tạo ra một UIView progrmatically.when cố gắng thiết lập chiều cao và chiều rộng cửa sổ để xem nó mang lại cho lỗi là "Giá trị của tùy chọn loại ' CGFloat? ' chưa được mở, ý bạn là sử dụng '!' hoặc là '?'?" ? tại sao lỗi này hiển thị bất kỳ trợ giúp sẽ được appreciated.thanks trước

Trả lời

25

Bạn đang sử dụng optional chaining, có nghĩa là self.window?.frame.width để đánh giá một số nguyên có giá trị nếu window không phải là nil, nếu không nó đánh giá để nil - tương tự cho height.

Vì bạn không thể tạo CGRect chứa nil (hoặc tốt hơn là, CGRectMake không chấp nhận tùy chọn cho bất kỳ đối số nào của nó), trình biên dịch báo cáo đó là lỗi.

Giải pháp là để ngầm unwrap self.window:

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

Nhưng điều đó đặt ra một lỗi thời gian chạy trong trường hợp self.windownil. Nó luôn luôn là một thực hành tốt hơn để bao quanh rằng với một tùy chọn ràng buộc:

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

để bạn có thể bảo rằng giao diện được tạo ra chỉ khi self.window thực ra không phải con số không.

+0

thanks.it đã giải quyết được sự cố của tôi – user3823935

Các vấn đề liên quan