ObjectiveC
我正在将一些自定义子类移植UIView
到Swift
今天早上。为了使其更加“面向对象”,我遵循了CGContext
使用方法进行扩展的示例。例如
extension CGContext {
func fillColor(color:UIColor) {
CGContextSetFillColorWithColor(self, color.CGColor)
}
}
因为我将客观的 C 风格消息(例如-(void) drawOutline: (CGContextRef) cr {...}
)转换为 Swift 风格的消息而没有给予太多关注(例如func drawOutline(cr:CGContextRef) {...}
),所以我一开始并没有意识到我在传递CGContextRef
参数,而是扩展了CGContext
(不是 Ref)。但它奏效了!
更奇怪的是,当我将那些CGContextRef
' 更改为 just CGContext
's 时。它仍然有效。不仅编译,而且正确运行和绘制。为了好玩,我改成了extension CGContextRef
. 然而它仍然继续工作。就好像 Swift 足够聪明,可以将它们归结为同一件事。是吗?还是这里发生了一些更微妙/更酷的事情?