将NSRangePointer从Objective-C转换为Swift

将某些Objective-C代码翻译成Swift时出现错误。

我正在使用- attribute:atIndex:effectiveRange:NSAttributedString和有关effectiveRange参数,这是一个NSRangePointer

Objective-C的:

 NSRange range; id value = [self.textanalyze attribute:attribute atIndex:index effectiveRange:&range] 

迅速:

 var range : NSRange? var value : Any = self.textanalyze.attribute(attributes, atIndex: index, effectiveRange: &range) 

我有一个错误附近&range

你需要打开范围。

另外,你需要初始化范围。 否则,这会使程序崩溃。

 var range : NSRange? = NSMakeRange(0, 1) self.textanalyze.attribute(attributes, atIndex: index, effectiveRange: &range!) 

或者,如果你不想打开你的范围(可能是零),重写你的function是这样的:

 var range : NSRange? doSomethingWithRangePointer(&range) func doSomethingWithRangePointer(range : UnsafeMutablePointer<NSRange?>) { // Do stuff } 

但是你可能并不需要首先使你的范围成为可选的(想想, range是否需要为零?如果不是,那么它不需要是可选的),在这种情况下,只需要初始化范围这将工作:

 var range = NSMakeRange(0, 1) 
 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()