我尝试使用协议设置对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()
}