无法将NSRange类型的值转换为预期的参数类型

时间:2016-02-09 19:29:42

标签: ios swift nsattributedstring

我试图将一些属性附加到NSAttributeString并继续收到以下错误。 Screenshot

var finder = Application('Finder')
finder.finderWindows().map(function(w){w.close()})
finder.home.folders["Documents"].folders["Projects"].open()
finder.finderWindows[0].bounds = {"x":0, "y":0, "width":1920, "height":1000}
finder.finderWindows[0].currentView = 'list view'

我收到错误:

  

无法将'NSRange'(又名'_NSRange')类型的值转换为预期的参数类型'NSRangePointer'(又名'UnsafeMutablePointer< _NSRange>')

1 个答案:

答案 0 :(得分:5)

attribute:atIndex:effectiveRange: getter 方法 - 它不会设置/附加/添加属性,它会向您报告属性值在字符串中特定索引处的内容。因此,effectiveRange参数是“out-pointer”:您传入指向NSRange的指针,并且该方法在返回时填充该指针处的数据。在Swift中(以及NSAttributedString扩展名内),您可以这样称呼它:

var range = NSRange()
let value = self.attribute(self.string, atIndex: 0, effectiveRange: &range)

但是,这不是你想要的。你似乎想要设置字符串上的属性,而不是获取的值现有属性。为此,请使用NSMutableAttributedStringaddAttribute:value:range:方法,或者(特别是如果您将属性应用于整个字符串)NSAttributedString的{​​{3}}构造函数。