gpt4 book ai didi

initialization - 在 super.init() 之前或之后我无法快速初始化东西

转载 作者:搜寻专家 更新时间:2023-11-01 05:54:30 26 4
gpt4 key购买 nike

我希望能够使用 self 初始化属性 subviewGroup 但这给了我错误:Property 'self.gridView' not initialized at super.init call

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

我得到错误:'self' 在 super.init 调用之前使用

我知道我可以使用 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 的文档:

Implicitly unwrapped optionals are useful when an optional’s value is confirmed to exist immediately after the optional is first defined and can definitely be assumed to exist at every point thereafter. The primary use of implicitly unwrapped optionals in Swift is during class initialization

关于initialization - 在 super.init() 之前或之后我无法快速初始化东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com