我想更改第一行文本的格式NSTextView
(给它不同的字体大小和粗细,使其看起来像标题)。因此,我需要第一行的范围。一种方法是这样:
guard let firstLineString = textView.string.components(separatedBy: .newlines).first else {
return
}
let range = NSRange(location: 0, length: firstLineString.count)
但是,我可能正在处理相当长的文本,因此首先分割文本似乎效率低下entire当我需要的只是第一行组件时,将字符串转换为行组件。因此,使用firstIndex(where:)
method:
let firstNewLineIndex = textView.string.firstIndex { character -> Bool in
return CharacterSet.newlines.contains(character)
}
// Then: Create an NSRange from 0 up to firstNewLineIndex.
这不起作用,我收到错误:
无法转换类型 ' 的值(Unicode.Scalar) -> Bool
'到预期的参数类型'Character
'
因为contains
方法不接受Character
but a Unicode.Scalar
作为参数(这对我来说并没有什么意义,因为那么它应该被称为UnicodeScalarSet
而不是一个CharacterSet
, 但是不要紧...)。
我的问题是:
我怎样才能以有效的方式实现这一点,而不需要先切片整个字符串?
(它不一定必须使用firstIndex(where:)
方法,但似乎是可行的方法。)
A String.Index
第一行的范围string
可以通过以下方式获得
let range = string.lineRange(for: ..<string.startIndex)
如果您需要它作为NSRange
then
let nsRange = NSRange(range, in: string)
就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)