【发布时间】:2016-01-26 09:31:43
【问题描述】:
我有一个 NSTextView,其中的文本正在以编程方式进行更改。我有this 问题中提到的确切问题。但是由于我使用的是 swift,所以当我尝试在 NSTextView 中实现 NSTextFinderClient 协议时,我收到编译器错误,提示“‘字符串’的类型与协议‘NSTextFinderClient’所要求的可选性不同”。我需要帮助来弄清楚如何正确地做到这一点。
【问题讨论】:
-
您能否在
NSTextView子类中提供符合协议的代码?特别是触发编译错误的行。我猜你只需要在这里打开一个可选的。 -
当我尝试构建项目时显示错误,它没有显示在一行代码中。目前我正在使用
func stringLength() -> Int和func stringAtIndex(characterIndex: Int, effectiveRange outRange: NSRangePointer, endsWithSearchBoundary outFlag: UnsafeMutablePointer<ObjCBool>) -> String这两种方法实现协议。您可以通过使 NSTextView 子类符合 NSTextFinderClient 协议来重现错误。 -
我认为问题源于
NSText是NSTextView的超类已经具有string类型的String?属性,而string属性由@987654330 定义@ 是String(非可选)。目前我想不出任何解决方案,除了让另一个对象(默认情况下没有string属性)作为客户端并引用您的NSTextView,几乎就像一个委托(从未这样做过) ) -
我尝试通过将控制 NSTextView 的 viewcontroller 设置为 NSTextFinder 的客户端,但随后没有调用 NSTextFinderClient 协议中的任何方法。
-
如果您提供
string属性,您实际上并不需要这两种方法。来自文档:“如果客户端无法在逻辑上或有效地将自身扁平化为单个字符串,则应实施 stringAtIndex:effectiveRange:endsWithSearchBoundary: 和 stringLength 方法。”只需为string提供一个吸气剂,你应该会很好.. 我认为?
标签: swift cocoa nstextview