我试图坚持下去并学习它并在Swift中编写应用程序,而不是默认使用Obj-C,尽管我一直陷入非常简单的事情并且似乎无法在线找到我的答案。回归的诱惑力很强。这就是我想要做的。
class CircleView : UIView {
var title: UILabel
convenience init(frame: CGRect, title: String) {
}
override init(frame: CGRect) {
self.title = UILabel.init(frame: CGRectMake(0.0, 0.0, frame.size.width, frame.size.height))
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
fatalError("CircleView is not NSCoding compliant")
}
}
我的目标是什么......创建CircleView实例的人必须同时提供框架和字符串。我怎么做到这一点?
答案 0 :(得分:1)
我认为你非常接近。便利初始化程序可以设置标签,然后调用指定的初始化程序:
class CircleView : UIView {
var title: UILabel
convenience init(frame: CGRect, title: String) {
self.init(frame: frame)
self.title.text = title
}
override init(frame: CGRect) {
self.title = UILabel.init(frame: CGRectMake(0.0, 0.0, frame.size.width, frame.size.height))
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
fatalError("CircleView is not NSCoding compliant")
}
}
这里唯一需要注意的是,有人仍然可以直接调用指定的初始化程序,而无需为标签提供文本。如果您不想允许,我相信您可以将指定的初始化程序设为私有,即:
private override init(frame: CGRect) { ... }