Xcode UIView继承和自定义初始值设定项在swift中抛出EXC_BAD_访问
我有继承类,比如: UIView->TestSubclass->Test 类Xcode UIView继承和自定义初始值设定项在swift中抛出EXC_BAD_访问,xcode,inheritance,uiview,initialization,Xcode,Inheritance,Uiview,Initialization,我有继承类,比如: UIView->TestSubclass->Test 类Test具有一些属性和方法。在我将一些初始值设定项添加到类TestSubclass中之前,它一直有效: class TestSubclass : UIView { override init(frame: CGRect) { super.init(frame: frame) print("CustomActivityInit") } required init(c
Test
具有一些属性和方法。在我将一些初始值设定项添加到类TestSubclass
中之前,它一直有效:
class TestSubclass : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
print("CustomActivityInit")
}
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
print("CustomActivityInitCoder")
}
}
在此之后,我无法访问我的Test
类的属性
override func viewDidLoad() {
super.viewDidLoad()
var test = Test(frame: CGRect.nullRect)
test.test = "zzz"
}
并在第test.test=“zzz”
你能帮我理解原因吗
这是要查看问题的测试项目
我使用XCode 6 beta 5、部署目标iOS7+、iOS8 SDK,由于继承自
UIView
,因此必须重写init()
class TestSubclass : UIView {
override init() {
super.init()
}
}
苹果的参考资料:
默认初始值设定项
Swift为任何结构或基类提供默认初始值设定项,该结构或基类为其所有属性提供默认值,但本身不提供至少一个初始值设定项。默认初始值设定项只是创建一个新实例,其所有属性都设置为默认值。
非常感谢。它确实有效。但对我来说真的很奇怪。我不明白它以前是怎么工作的。为什么
TestSubclass
及其属性在不重写init()的情况下工作良好?只有继承TestSubclass
的Test
有bug。如果我使用init(frame:),什么时候调用init()方法?为什么xcode只建议使用init(frame:)和init(coder aDecoder:)方法?事实上,我无法从苹果的文档甚至电子书中看出它到底是如何工作的。它必须与类继承和初始化
和初始化器链接
相关。我猜属性不会被初始化,因为Test
类不是基类,而超类不满足继承规则。因此,您可以在TestSubclass
中重写init()
,也可以不重写TestSubclass
中任何指定的初始值设定项。据我所知,这些解决方案可能也能奏效。