如何使用协议从 UIView 设置对象布局



我尝试使用协议设置对UIView引用的对象布局。我的视图类如下所示:

protocol FirstViewLayout {
   var label: String { get }
   var text: String { get }
}
class FirstView: UIView {
@IBOutlet weak var label: UILabel! // reference to object in storyboard
@IBOutlet weak var button: UIButton! // reference to object in storyboard
init(layout: FirstViewLayout){
       super.init(frame: UIScreen.mainScreen().bounds)
       label.text = layout.text
       button.setTitle(layout.text, forState: .Normal)
   }
   required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
   }
}//end class

然后我创建一个单独的 swift 文件,在其中创建简单的结构并从视图中设置对象的值

struct FirstViewStruct: FirstViewLayout {
   var label: String { return "Test" }
   var text: String { return "TEST" }
}

之后,我去ViewControler并像这样设置viewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()
    let layout = FirstView(layout: FirstViewStruct())
    self.view.addSubview(layout)
}

在这种情况下,我收到一个错误fatal error: unexpectedly found nil while unwrapping an Optional 此刻:

label.text = layout.text
我不知道

为什么。有人可以帮我解决这个问题吗?

我认为你不能在结构中有默认值。

创建一个填充值的初始化:

convenience init() {
    self.label  = "test"
    self.text = "test"
    super.init()
}

最新更新