[英]Translate NSRangePointer from Objective-C to 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!)
或者,如果您不想打开您的范围(可能是零),请重写您的函数,如下所示:
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.