gpt4 book ai didi

swift - 在不提供 NSTextContainer 的情况下初始化 NSTextView 的子类

转载 作者:可可西里 更新时间:2023-11-01 01:01:36 26 4
gpt4 key购买 nike

我有一个 NSTextView 的子类,在这个子类的初始化器中我想调用:

super.init(frame: NSMakeRect(...))

这是我在以编程方式初始化 NSTextView 时经常做的事情。我简单的写:

let textView = NSTextView(frame: NSMakeRect(0,0,10,10))

但是,当我在子类 (super.init(frame: (...))) 中执行此操作时,编译器会抛出错误。它不会让我使用 init(frame:) 因为 init(frame:)NSTextView 的便利初始化器,我必须调用“父类(super class)的指定初始值设定项。”

查看文档后,我发现NSTextView的designated initializer是init(frame: textContainer:),但我不想处理 NSTextContainers。为什么我必须从对象的子类中调用指定的初始化器,但如果对象没有被子类化,我可以调用便利的初始化器?每当我通常初始化一个 NSTextView 时,我不必提供一个 NSTextContainer,但是当我将一个 NSTextView 初始化为子类的父类(super class)时,我愿意。这是为什么?

此外,是否有任何方法可以使用一种“默认”文本容器来初始化 NSTextView?不管指定的初始值设定项如何,我在这里要做的就是创建一个 NSTextView 而不必担心 NSTextContainers

最佳答案

我为此找到了一轮工作。它不漂亮,但它完成了工作。基本上,我只是使用 init(frame:) 在我的子类初始化程序中创建一个 NSTextView 实例,然后将生成的 textContainer 应用到 super :

class Header: NSTextView {

// methods and properties...

init(frame theFrame: NSRect) {
// using desired convenience initializer
let test = NSTextView(frame: theFrame)

// using designated initializer, as required by the compiler
super.init(frame: test.frame, textContainer: test.textContainer)
}

}

关于swift - 在不提供 NSTextContainer 的情况下初始化 NSTextView 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34616892/

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