属性'self。*'没有在super.init调用中初始化
我只是更新我的xcode到6.3.1。 问题是我得到这个奇怪的错误信息,因为迅速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
请指教。 谢谢。
在任何init方法中调用super.init
之前,必须初始化所有属性
所以,在你调用super.init()之前,
originView = sourceView //error here
例外:
- 可选属性
- 财产与默认值
- 懒惰的财产
让你的originView
空
var originView: UIView?.
如果您的originView
不可为空,您必须在调用之前提供一个默认值
super.init().
从苹果的“Swift编程语言”一书中:
“Swift的编译器执行四个有用的safety-checks
,以确保两相初始化完成没有错误”
“一个指定的初始化器必须确保所有的”由它的类引入的属性在被委托给一个超类初始化器之前被初始化“。
基本上你必须ensure that your instance variables are in a consistent state
做任何事之前ensure that your instance variables are in a consistent state
,包括调用方法。
class YourClass { var view: UIView init(view: UIView) { self.view = view } }
以及你的情况,你可以使它成为一个新的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 }
- 如何获得“谁”邀请使用iOS的Facebook应用程序邀请SDK?
- 我们可以在一个Watchkit应用程序中创build多个glance界面吗?
- Swift用Swift编写的AST。 ∞的第4部分
- MVVM和协调器模式一起
- 即使保存之后,新创build的NSManagedObject也会返回临时的objectID
- 在屏幕上的不同点上渲染多个纹理,而不使用点精灵
- Xcode6 IPAD 1x 2xbutton
- 使用UICollectionView和NSFetchedResultsController不保存
- 在Swift中将Int更改为CGFloat以返回heightForRowAtIndexPath tableview函数