如何获取NSAttributedString中指定索引对应属性的完整范围?
问题解答
不能直接获取到该属性的完整范围,原因是你将longestEffectiveRange参数传为了nil——这个参数的核心作用就是接收当前位置属性生效的最大连续范围。
要拿到你期望的6-10对应的范围,需要传入一个可变的NSRange变量的指针,示例代码如下:
var effectiveRange = NSRange() let attributes = textView.textStorage.attributes( at: 7, longestEffectiveRange: &effectiveRange, in: NSRange(location: 0, length: textView.textStorage.length) ) // 此时effectiveRange的值为NSRange(location: 6, length: 5)
补充说明:
longestEffectiveRange是UnsafeMutablePointer<NSRange>?类型,当传入有效指针时,系统会把当前索引位置属性的完整连续生效范围写入该指针指向的变量中;传nil则会跳过范围信息的返回。- 注意NSRange的定义:你提到的6到10(含两端)共5个字符,所以对应的NSRange是
location:6, length:5,而非length:10,这是容易混淆的点。
内容的提问来源于stack exchange,提问作者Stefano Vet
相关产品推荐
相关产品推荐

