将NSRangePointer从Objective-C翻译为Swift

时间:2014-09-13 16:35:04

标签: ios objective-c swift

我在将一些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}}附近收到错误。

2 个答案:

答案 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()