在NSAttributedString API中使用Range <Index>和NSRange

Jor*_*n H 9 range nsattributedstring ios nsrange swift

我正在尝试确定a中给定字符串出现的索引String,然后NSRange使用这些索引生成一个以便为a添加属性NSMutableAttributedString.问题是rangeOfString退货,Range<Index>addAttributes:range:预计会有NSRange.我尝试NSRange从开始和结束索引创建Range失败,因为String.CharacterView.Index不是Int,因此它不会编译.

如何使用Range<Index>值来创建NSRange

var originalString = "Hello {world} and those who inhabit it."

let firstBraceIndex = originalString.rangeOfString("{") //Range<Index>
let firstClosingBraceIndex = originalString.rangeOfString("}")

let range = NSMakeRange(firstBraceIndex.startIndex, firstClosingBraceIndex.endIndex)
//compile time error: cannot convert value of type Index to expected argument type Int

let attributedString = NSMutableAttributedString(string: originalString)
attributedString.addAttributes([NSFontAttributeName: boldFont], range: range)
Run Code Online (Sandbox Code Playgroud)

mat*_*att 8

如果您从原始字符串转换为Cocoa NSString开头:

var originalString = "Hello {world} and those who inhabit it." as NSString
Run Code Online (Sandbox Code Playgroud)

...然后你的范围结果将是NSRange,你将能够将它们交还给Cocoa.

  • 它可能是这样做的方式,但涉及桥接.它不会*完全*使用String,它绝对不使用Swift Ranges.它对我有用,但它不仅仅是一种"解决方法".很明显是什么困扰他的解决方案; 没有必要对它进行磨蚀. (16认同)