我在将一些Objective-C代码翻译成Swift时遇到错误。
我正在使用NSAttributedString
effectiveRange
并且NSRangePointer
参数出错,这是NSRange range;
id value = [self.textanalyze
attribute:attribute
atIndex:index
effectiveRange:&range]
。
目标-C:
var range : NSRange?
var value : Any = self.textanalyze.attribute(attributes,
atIndex: index,
effectiveRange: &range)
夫特:
&range
我在{{1}}附近收到错误。
答案 0 :(得分:12)
您需要打开范围。
此外,您需要初始化范围。否则,这将使您的程序崩溃。
var range : NSRange? = NSMakeRange(0, 1)
self.textanalyze.attribute(attributes, atIndex: index, effectiveRange: &range!)
或者,如果您不想打开您的范围(可能是零),请重写您的功能:
var range : NSRange?
doSomethingWithRangePointer(&range)
func doSomethingWithRangePointer(range : UnsafeMutablePointer<NSRange?>) {
// Do stuff
}
但是你可能不需要首先让你的范围成为可选范围(想想,range
是否需要为零?如果没有,那么它不需要是可选的。) ,在这种情况下,只需像这样初始化范围:
var range = NSMakeRange(0, 1)
答案 1 :(得分:2)
let a = sizeof(NSRange)
let objRangePtr:NSRangePointer = NSRangePointer.alloc(a) //alloc memory
objLayoutManager.characterRangeForGlyphRange(range, actualGlyphRange:objRangePtr)
let objRange = objRangePtr.move() //gain the value and dealloc()