在Swift - error中子类化UIView



我有一个名为myview。swift的文件,它看起来像这样:

class MyView : UIView {
}

我还有一个MyView。

在视图控制器中,我有这个:

var myView: MyView?
override func viewDidLoad() {
    super.viewDidLoad()
    self.myView = NSBundle.mainBundle().loadNibNamed("MyView", owner: nil, options: nil)[0] as MyView
    self.myView.frame = frame;
    self.view.addSubview(self.myView);
}

我得到这个错误:

MyView? does not have a member named 'frame'

为什么?MyView是UIView的子类

您必须隐式地展开可选内容,或者使用可选链接。

self.myView!.frame = frame

或者使用可选的链接。

self.myView?.frame = frame 
// can do this now in Swift.

第一个选项更危险,因为当您强制展开可选选项时,如果它是nil,将会发生运行时错误。

编辑我很抱歉,可选链接不是适合这里工作的工具。如果您想查询框架的值,它是正确的工具。或者,您可以使用if let语法。

if let optionalView = self.myView {
    var queriedFrame = optionalView.frame
}

MyViewUIView的子类,但MyView?是一个Optional,只有两种可能的情况:

(1)nil,或者

(2)保存类型为MyView的包装值

…在任何一种情况下,它仍然是一个可选的,这意味着它没有一个名为'frame'的成员:),尽管如果它持有MyView的包装值,那么包装值确实如此!

要获得包装的值(假设它有一个),您有必要使用!显式地展开它,或者使用可选绑定(if let)来访问它的属性。

最新更新