我很快更新了Xcode 6.3.2附带的Swift 1.2并写了几行代码:
let originView:UIView!
override init() {
super.init()
}
init(sourceView:UIView, menuItems:Array<String>){
super.init()
originView = sourceView
}
此代码运行完美,直到我更新了新版本的Xcode(6.3.2)。
现在我收到以下错误:Property 'self.originView' not initialized at super.init call
到目前为止,我无法找到解决方案,因为我还在学习Swift。
有人知道我怎么能解决这个问题吗?
P.S由于这段代码不是this question的重复:init(sourceView:UIView, menuItems:Array<String>)
而不是override init(frame: CGRect)
。
更新
新代码:
override convenience init() {
self.init()
}
init(sourceView:UIView, menuItems:Array<String>){
originView = sourceView
super.init()
}
此代码行中的 新错误 Thread 1: EXC_BAD_ACCESS (code=2, address=0x7fff5f300ff8)
:self.init()
答案 0 :(得分:2)
尝试修改此部分。
override init() {
super.init()
}
要
override init() {
self.init(UIView(), nil) // Or other initial values
}
如果这不能解决您的错误,这是更好的方法,因为init()会调用您的自定义init并初始化您的变量。
在更新时修改
您的修改不正确
override convenience init() {
self.init() // This init referred "override convenience init()" !! So recursive call
}
你必须像我之前说的那样给出init调用的参数,以便将“override convenience init()”重定向到“init(sourceView:UIView,menuItems:Array)”。
答案 1 :(得分:0)
交换init(sourceView: UIView, menuItems:Array<String>)
中的2行:
init(sourceView:UIView, menuItems:Array<String>){
originView = sourceView
super.init()
}
希望这会奏效。
编辑:在第一个函数中调用super.init()
答案 2 :(得分:0)
在调用超类初始值设定项之前,必须初始化所有非可选的可变属性和所有不可变属性(无论是否为可选):
init(sourceView:UIView, menuItems:Array<String>){
originView = sourceView
super.init(frame: CGRect.zeroRect)
}
请注意,由于originView
属性是不可变的,因此您实际上不需要将其作为隐式展开的可选项。传递给初始值设定项的sourceView
参数不是可选的,因此您可以将该属性设置为非可选属性:
let originView: UIView
答案 3 :(得分:0)
更改此行:
Should I maybe first check out which C standard this compiler conforms to
到
let originView:UIView!
你已经完成了。