Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
如何在Swift的NSTextView中实现NSTextFinderClient协议?_Swift_Cocoa_Nstextview - Fatal编程技术网

如何在Swift的NSTextView中实现NSTextFinderClient协议?

如何在Swift的NSTextView中实现NSTextFinderClient协议?,swift,cocoa,nstextview,Swift,Cocoa,Nstextview,我有一个NSTextView,其中文本正在通过编程进行更改。我有问题中提到的确切问题。但由于我使用swift,当我尝试在NSTextView中实现NSTextFinderClient协议时,我收到一个编译器错误,即“字符串类型”的可选性与协议“NSTextFinderClient”所要求的不同”。我需要帮助找出正确的方法。我找到了解决问题的方法。 替换这个 class TextView: NSTextView, NSTextFinderClient { var textFinder: N

我有一个NSTextView,其中文本正在通过编程进行更改。我有问题中提到的确切问题。但由于我使用swift,当我尝试在NSTextView中实现NSTextFinderClient协议时,我收到一个编译器错误,即“字符串类型”的可选性与协议“NSTextFinderClient”所要求的不同”。我需要帮助找出正确的方法。

我找到了解决问题的方法。 替换这个

class TextView: NSTextView, NSTextFinderClient {
    var textFinder: NSTextFinder!
}

将TexTFinder对象拖放到包含TextView出口的场景中。将TextView的textFinder链接到TextFinderObject,并使TextView成为Outlet的客户端。在此之后,您将能够向FindBar发送通知,如
textFinder.noteClientStringWillChange()

textFinder.performation(.hidefinder界面)
。在执行此操作时,我们不需要通过编程使TextView对象确认NSTextFinderClient协议。

您能否在
NSTextView
子类中提供确认协议的代码?尤其是触发编译错误的行。我猜你只需要在这里打开一个可选的。错误显示在我尝试构建项目时,它没有显示在代码行中。目前,我正在使用这两种方法实现协议
func stringLength()->Int
func stringAtIndex(characterIndex:Int,effectiveRange outRange:NSRangePointer,endsWithSearchBoundary outFlag:UnsafeMutablePointer)->String
。您只需将NSTextView子类与NSTextFinderClient协议一致,就可以重现错误。我认为问题的根源在于
NSText
NSTextView
的超类,它已经具有
string
类型的
string?
属性,而
string
属性由
NSTextFinderClient
是一个
字符串(非可选)。目前我想不出任何解决方案,除了让另一个对象(默认情况下没有
字符串
属性)作为客户端并引用您的
NSTextView
,几乎像委托一样(从未这样做),我尝试将控制NSTextView的viewcontroller作为NSTextFinder的客户端,但是没有调用NSTextFinderClient协议中的任何方法。如果提供
string
属性,则实际上不需要这两个方法。在文档中:“如果客户端无法逻辑或有效地将自身展平为单个字符串,那么应该实现stringAtIndex:effectiveRange:endsWithSearchBoundary:和stringLength方法。”只需为
字符串提供一个getter
,您就应该很好了。。我想?
class TextView: NSTextView {
    @IBOutlet weak var textFinder: NSTextFinder!
}