我尝试设置对象布局,其中使用协议引用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并从视图
设置对象的值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
我不知道为什么。有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
我认为你不能在struct中拥有默认值。
创建一个填充值的init:
convenience init() {
self.label = "test"
self.text = "test"
super.init()
}