属性 'self.*' 未在 super.init 调用时初始化
Property 'self.*' not initialized at super.init call
我刚刚将 xcode 更新到 6.3.1。问题是自 Swift 1.2 以来我收到了这个奇怪的错误消息。我收到了这种错误信息
/Users/MNurdin/Documents/iOS/xxxxx/Library/SideBar.swift:32:15: Property 'self.originView' not initialized at super.init call
/Users/MNurdin/Documents/iOS/xxxxx/Library/SideBar.swift:38:20: Immutable value 'self.originView' may only be initialized once
在此代码上
let originView:UIView?
override init() {
super.init() //error here
}
init(sourceView:UIView, menuItems:Array<String>){
super.init() //error here
originView = sourceView //error here
在任何初始化方法中调用 super.init
之前必须先初始化所有 属性
所以,在调用 super.init() 之前更改此设置
originView = sourceView //error here
异常:
- 可选属性
- 属性 默认值
- 懒惰属性
让 originView
可以由
为空
var originView: UIView?.
如果您的 originView
不可为空,您必须在调用前提供默认值
super.init().
摘自 Apple 的“Swift 编程语言”一书:
“Swift 的编译器执行四个有用的 safety-checks
以确保两阶段初始化无误地完成”
“一个指定的初始化器必须确保它的 class 引入的所有“属性在它委托给超级class 初始化器之前被初始化。”
基本上你必须 ensure that your instance variables are in a consistent state
在你做任何事情之前,包括调用方法。
class YourClass {
var view: UIView
init(view: UIView) {
self.view = view
}
}
在您的情况下,您可以将其设为 new UIView:
let originView = UIView()
或使其 可为空
let originView: UIView?
或懒惰属性:
lazy var originView: UIView = {
let view = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 200))
// customize it
return view
}()
使用延迟实例化时,您可以传递一个方法:
lazy var originView: UIView = self.createView()
func createView() -> UIView {
let view = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 200))
// customize it
return view
}
我刚刚将 xcode 更新到 6.3.1。问题是自 Swift 1.2 以来我收到了这个奇怪的错误消息。我收到了这种错误信息
/Users/MNurdin/Documents/iOS/xxxxx/Library/SideBar.swift:32:15: Property 'self.originView' not initialized at super.init call
/Users/MNurdin/Documents/iOS/xxxxx/Library/SideBar.swift:38:20: Immutable value 'self.originView' may only be initialized once
在此代码上
let originView:UIView?
override init() {
super.init() //error here
}
init(sourceView:UIView, menuItems:Array<String>){
super.init() //error here
originView = sourceView //error here
在任何初始化方法中调用 super.init
之前必须先初始化所有 属性
所以,在调用 super.init() 之前更改此设置
originView = sourceView //error here
异常:
- 可选属性
- 属性 默认值
- 懒惰属性
让 originView
可以由
var originView: UIView?.
如果您的 originView
不可为空,您必须在调用前提供默认值
super.init().
摘自 Apple 的“Swift 编程语言”一书:
“Swift 的编译器执行四个有用的 safety-checks
以确保两阶段初始化无误地完成”
“一个指定的初始化器必须确保它的 class 引入的所有“属性在它委托给超级class 初始化器之前被初始化。”
基本上你必须 ensure that your instance variables are in a consistent state
在你做任何事情之前,包括调用方法。
class YourClass {
var view: UIView
init(view: UIView) {
self.view = view
}
}
在您的情况下,您可以将其设为 new UIView:
let originView = UIView()
或使其 可为空
let originView: UIView?
或懒惰属性:
lazy var originView: UIView = {
let view = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 200))
// customize it
return view
}()
使用延迟实例化时,您可以传递一个方法:
lazy var originView: UIView = self.createView()
func createView() -> UIView {
let view = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 200))
// customize it
return view
}