CTFrameGetLineOrigins()当我将项目从OC转换为Swift

时间:2015-06-11 13:01:23

标签: objective-c swift core-text

我的情况:

我正在尝试将用Objective-C编写的开源项目翻译成Swift。我被CGPoint Struct问题阻碍了好几天。

CGPoint lineOrigins[numberOfLines];  

// An array includes some CGPoint elements which written in OC.

解决之后,我不确定它是否正确,因为编译器没有错误。

var lineOrigins = [CGPoint](count: numberOfLines, repeatedValue: CGPointZero)

// The Swift Code translated from above OC Code.

我的项目中显示了另一个CTFrameGetLineOrigins()问题。

Objective-C代码的一部分:

- (void)drawFramesetter:(CTFramesetterRef)framesetter
   attributedString:(NSAttributedString *)attributedString
          textRange:(CFRange)textRange
             inRect:(CGRect)rect
            context:(CGContextRef)c
{
                      .
                      .
                      .
CFArrayRef lines = CTFrameGetLines(frame);
NSInteger numberOfLines = CFArrayGetCount(lines);
CGPoint lineOrigins[numberOfLines];
CTFrameGetLineOrigins(frame, CFRangeMake(0, numberOfLines), lineOrigins);
                      .
                      .
                      .
}


Swift代码的一部分:

func drawFramesetter(framesetter: CTFramesetterRef,
attributedString _attributedString: NSAttributedString,
textRange _textRange: CFRange,
inRect rect: CGRect, context c: CGContextRef) {
                      .
                      .
                      .
var lines: CFArrayRef = CTFrameGetLines(frame)
var numberOfLines: NSInteger = CFArrayGetCount(lines)
var lineOrigins = [CGPoint](count: numberOfLines, repeatedValue: CGPointZero)
CTFrameGetLineOrigins(frame, CFRangeMake(0, numberOfLines), lineOrigins)
                      .
                      .
                      .
}

我的问题:

错误Cannot invoke 'CTFrameGetLineOrigins' with an argument list of type '(CTFrame, CFRange, [(CGPoint)])'出现了。

  • 检查完官方文档后,我发现Swift中CTFrameGetLineOrigins被声明为CTFrameGetLineOrigins(frame: CTFrame!, range: CFRange, origins: UnsafeMutablePointer<CGPoint>)

  • 在Objective-C中它也被声明为CTFrameGetLineOrigins(CTFrameRef frame, CFRange range, CGPoint origins[])

  • 两个函数参数之间的差异为CGPoint。来吧!!! CGPoint再次?

我的问题:

  • 我猜这个错误是由CGPoint的参数触发的。将[CGPoint]翻译为UnsafeMutablePointer<CGPoint>时,我必须犯错误。谁能说出这两种类型之间的区别呢?
  • 请告诉我们如何解决这个问题。


非常感谢您的时间和指导。

Ethan Joe

0 个答案:

没有答案