我正在尝试将用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()
问题。
- (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);
.
.
.
}
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