gpt4 book ai didi

macos - 尽管 header 注释,在 Swift 中采用 NSTextFinderBarContainer 协议(protocol)会强制变量初始化

转载 作者:行者123 更新时间:2023-11-28 09:05:12 27 4
gpt4 key购买 nike

我有一个 NSView 子类,它实现了 NSTextFinderBarContainer 协议(protocol)。 NSTextFinderBarContainer 协议(protocol)的一部分正在实现

var findBarView: NSView { get set }

然而,原始 O​​bjective-C header 中此属性上方的注释是:

This property is used by NSTextFinder to assign a find bar to a container. The container may freely modify the view's width, but should not modify its height. This property is managed by NSTextFinder. You should not set this property.

因为 Swift 需要初始化所有的实例变量,我该如何处理这种情况?看来 Swift 要求我反对 Apple 在 header 中写的内容:您不应该设置此属性,因为它将由 NSTextFinder 本身设置/管理。

如果我不覆盖我得到的 NSView 初始值设定项:

Class 'ExampleContainerView' has no initializers

正如预期的那样,findBarView 没有初始值。

我的 Swift 代码的相关部分是:

class ExampleContainerView: NSView, NSTextFinderBarContainer {

var findBarView : NSView

...
}

如果我重写指定的初始化器来初始化 findBarView 如下(忽略 Apple 在 header 中的注释):

required init?(coder: NSCoder) {
findBarView = NSView(frame: NSRect())
super.init(coder: coder)
}

应用程序在 NSTextFinder 发送 setFindBarContainer: 消息后崩溃

-[NSView _setTextFinder:]: unrecognized selector sent to instance 0x6000001278a0

0x6000001278a0 处的对象是上面覆盖的初始化程序中设置的 NSView 实例。

最佳答案

这在 Xcode 7.0 beta 6 中似乎已修复。NSTextFinderBarContainer 现在将 findBarView 声明为可选的 NSView:

public var findBarView: NSView? { 设置 }

此外,contentView()也改为返回一个可选的NSView:

可选的 public func contentView() -> NSView?

使属性可选意味着不再有 API 注释说不要设置 findBarView 的矛盾,同时让 Swift 要求所有非可选属性在您的初始化器中初始化。

关于macos - 尽管 header 注释,在 Swift 中采用 NSTextFinderBarContainer 协议(protocol)会强制变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30991091/

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