将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()