关于ios:将NSRangePointer从Objective-C转换为Swift

Translate NSRangePointer from Objective-C to Swift

将一些Objective-C代码转换为Swift时出现错误。

我正在使用NSAttributedString-?attribute:atIndex:effectiveRange:,并且与effectiveRange参数有关,该错误为NSRangePointer

Objective-C:

1
2
3
4
5
NSRange range;
id value = [self.textanalyze
                      attribute:attribute
                        atIndex:index
                 effectiveRange:&range]

快捷键:

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

&range附近出现错误。


您需要解开范围。

此外,您需要初始化范围。否则,这将使您的程序崩溃。

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

或者,如果您不想打开范围(可能为nil),请重写函数,如下所示:

1
2
3
4
5
6
var range : NSRange?
doSomethingWithRangePointer(&range)

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

但是您可能不需要首先将范围设为可选(想想,range是否需要为零?如果不需要,那么它就不必为可选)。 ,只需像这样初始化范围即可:

1
var range = NSMakeRange(0, 1)


1
2
3
4
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()