o.u*_*inn 1 initialization optional swift
我希望能够使用self初始化属性subviewGroup但是这给了我错误:属性'self.gridView'未在super.init调用时初始化
init(frame: NSRect) {
    super.init(frame: frame)
    subviewGroup = GridViewGroup(rows: 9, columns: 9, gridView: self)
}
/***  Properties  ***/
let subviewGroup: GridViewGroup
然后如果我在初始化后把super.init()放到这样的话
init(frame: NSRect) {
    subviewGroup = GridViewGroup(rows: 9, columns: 9, gridView: self)
    super.init(frame: frame)
}
/***  Properties  ***/
let subviewGroup: GridViewGroup
我收到错误:在super.init调用之前使用'self'
我知道我可以使用一个Optional,但是因为在init()调用之后它永远不会是nil似乎没必要.有没有办法正确地做到这一点,而不使subviewGroup成为可选项?
这是一个使用可选的工作示例
/***  Initializers  ***/
init(frame: NSRect) {
    super.init(frame: frame)
    subviewGroup = GridViewGroup(rows: 9, columns: 9, gridView: self)
}
/***  Properties  ***/
let subviewGroup: GridViewGroup?
这正是隐式解包的期权有用的东西.您可以像这样轻松地将它们添加到您的示例中:
/***  Initializers  ***/
init(frame: NSRect) {
    super.init(frame: frame)
    subviewGroup = GridViewGroup(rows: 9, columns: 9, gridView: self)
}
/***  Properties  ***/
let subviewGroup: GridViewGroup!
使用隐式展开的可选项允许您将变量视为不可选,并在调用时直接访问底层变量.
使用普通的可选代码,您的代码可能看起来像var nonoptional: GridViewGroup  = subviewGroup!隐藏的解包选项,您可以丢弃!:var nonoptional: GridViewGroup = subviewGroup.
来自Apple的文档:
当在首次定义可选项之后立即确认可选的值存在时,隐式展开的选项很有用,并且可以假定在此后的每个点都存在.Swift中隐式解包选项的主要用途是在类初始化期间
| 归档时间: | 
 | 
| 查看次数: | 1589 次 | 
| 最近记录: |