Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Swift中采用NSTextFinderBarContainer协议将强制进行变量初始化,而不考虑标头注释_Macos_Swift_Cocoa - Fatal编程技术网

Macos 在Swift中采用NSTextFinderBarContainer协议将强制进行变量初始化,而不考虑标头注释

Macos 在Swift中采用NSTextFinderBarContainer协议将强制进行变量初始化,而不考虑标头注释,macos,swift,cocoa,Macos,Swift,Cocoa,我有一个NSView子类,它实现了NSTextFinderBarContainer协议。NSTextFinderBarContainer协议的一部分正在实现 var findBarView: NSView { get set } 但是,原始Objective-C标题中此属性上方的注释为: NSTextFinder使用此属性将查找栏指定给 容器。容器可以自由修改视图的宽度,但 不应修改其高度。此属性由管理 NSTextFinder不应设置此属性。 因为Swift要求初始化所有实例变量,所以如何处

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

var findBarView: NSView { get set }
但是,原始Objective-C标题中此属性上方的注释为:

NSTextFinder使用此属性将查找栏指定给 容器。容器可以自由修改视图的宽度,但 不应修改其高度。此属性由管理 NSTextFinder不应设置此属性。

因为Swift要求初始化所有实例变量,所以如何处理这种情况?Swift似乎要求我反对苹果在标题中所写的内容:您不应该设置此属性,因为它将由
NSTextFinder
本身设置/管理

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

类“ExampleContainerView”没有初始值设定项

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

我的Swift代码的相关部分包括:

class ExampleContainerView: NSView, NSTextFinderBarContainer {

    var findBarView : NSView

    ...
}
如果我覆盖指定的初始值设定项来初始化
findBarView
,如下所示(忽略标题中苹果的注释):

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

-[NSView _setTextFinder:]:发送到实例0x6000001278a0的无法识别的选择器


0x6000001278a0处的对象是在上面覆盖的初始值设定项中设置的NSView实例。

从Xcode 7.0 beta 6开始,这看起来是固定的
NSTextFinderBarContainer
现在将
findBarView
声明为可选的
NSView

public var findBarView:NSView?{get set}

此外,
contentView()
还更改为返回可选的
NSView

可选公共函数contentView()->NSView?


将属性设置为可选意味着不再存在让API注释说不要设置
findBarView
,而让Swift要求在初始值设定项中初始化所有非可选属性的矛盾。

从Xcode 7.0 beta 6开始,这似乎是固定的
NSTextFinderBarContainer
现在将
findBarView
声明为可选的
NSView

public var findBarView:NSView?{get set}

此外,
contentView()
还更改为返回可选的
NSView

可选公共函数contentView()->NSView?

将属性设置为可选意味着不再存在让API注释说不要设置
findBarView
,而让Swift要求在初始值设定项中初始化所有非可选属性的矛盾

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