我有一个班级
class ChartView: UIView
{
class: DotView {
let circleView1: UIView
let circleView2: UIView
init (view: UIView)
{
self.view = view
self.circleView1 = self.buildCircle(some rect here)
self.circleView2 = self.buildCircle(some rect here)
func buildCircle(rect: CGRect) -> UIView
{
let dotView = UIView(frame: rect)
dotView.backgroundColor = UIColor.whiteColor()
dotView.layer.cornerRadius = dotView.bounds.width / 2
self.view.addSubview(dotView)
return dotView
}
}
}
但是我收到了这个错误: 使用' self'在方法调用' buildCircle'在所有存储的属性初始化之前
所以我只想在某个方法中创建对象,然后将其分配给存储的属性。我该如何修复我的代码?
答案 0 :(得分:12)
在初始化所有非可选实例变量之前,您无法在self上调用方法。 有几种方法可以解决这个问题。
buildCircle()
方法设为静态或仅为a
在文件中运行,并为所有圈子调用addSubview()
在所有属性初始化并且您调用之后
super.init()
答案 1 :(得分:3)
为了解决这个问题,可以使用这些方法:
class MyClass: NSObject {
var prop: String = ""
override init() {
super.init()
self.setupMyProperty()
}
func setupMyProperty() {
prop = "testValue"
}
}
class MyClass1: NSObject {
var prop: String = ""
override init() {
prop = MyClass1.setupMyProperty()
super.init()
}
class func setupMyProperty() -> String{
return "testValue"
}
}
答案 2 :(得分:0)
您可以在函数willMoveToSuperview
中创建circleView。
在此生命周期功能中,您确保正确分配ChartView
,因此:
override func willMoveToSuperview(newSuperview: UIView?) {
self.circleView1 = self.buildCircle(some rect here)
self.circleView2 = self.buildCircle(some rect here)
}