繁体   English   中英

将NSRangePointer从Objective-C翻译为Swift

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM