gpt4 book ai didi

macos - swift : "fatal error: use of unimplemented initializer ' 初始化()' for class..."

转载 作者:行者123 更新时间:2023-11-28 10:25:32 25 4
gpt4 key购买 nike

这是一个简单的类,我想用两个数组实例化以填充 mac 应用程序上的 NSTableView:

class TableController: NSObject, NSTableViewDataSource, NSTableViewDelegate {

var paintingNames:[String]
var paintingKeys:[String]

init(names:[String], keys:[String]) {
paintingNames = names
paintingKeys = keys
// breakpoint here shows both arrays have values
}
...
}

当我在初始化代码时单步执行代码时,到目前为止一切正常。然后我得到这个错误:

"fatal error: use of unimplemented initializer 'init()' for class..."

所以我可以通过添加数组选项(不是我想要的,因为它们是 tableView 的数据源)并添加覆盖 init() 调用来避免此错误:

class TableController: NSObject, NSTableViewDataSource, NSTableViewDelegate {

var paintingNames:[String]?
var paintingKeys:[String]?

override init() { // this gets called after the first custom init function

// a breakpoint here shows the arrays are now both nil
}

init(names:[String], keys:[String]) { //this gets called first
paintingNames = names
paintingKeys = keys
// breakpoint here shows both arrays have values
}
...
}

如果在 override init() 调用中没有对数组进行 nil 检查,则数组为 nil。即使添加了这一点逻辑:

override init() { // this gets called after the first custom init function
if paintingNames != nil {
paintingNames = [String]()
}

if paintingKeys != nil {
paintingKeys = [String]()
}
}

他们仍然是零。

这是怎么回事?

最佳答案

将数组作为可选值的原因是因为可选值被自动分配为 nil

var paintingNames:[String]?
var paintingKeys:[String]?

做完全一样的事情
var paintingNames:[String]? = nil
var paintingKeys:[String]? = nil

此时您实际上可以删除 init() 声明,因为您的默认初始化程序已经为您隐式创建。

您还没有添加任何代码来显示调用默认初始化程序的位置,我希望您没有调用两个 init() 函数……这是导致意外结果的秘诀。

如果您只想使用 init(names:[String], keys:[String]) 初始化器实例化此类的对象,只需让您的默认初始化器抛出异常即可,即,

init() {
fatalError("init() has not been implemented")
}

这将防止您犯下使用 init() 创建对象的错误。另一种方法是让你的 init() 变成:

override convenience init() {
self.init(names:nil, keys:nil)
}

如果您不知道,便利 初始化器允许您从一个初始化器中调用其他本地初始化器。

关于macos - swift : "fatal error: use of unimplemented initializer ' 初始化()' for class...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26836915/

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