Tra*_*ggs 2 cgcontext cgcontextref swift
今天早上我正在移植一些ObjectiveC自定义UIView子类Swift。为了使其更加“面向对象”,我遵循了使用CGContext方法扩展的示例。例如
extension CGContext {
func fillColor(color:UIColor) {
CGContextSetFillColorWithColor(self, color.CGColor)
}
}
Run Code Online (Sandbox Code Playgroud)
因为我正在将目标 C 风格的消息(例如-(void) drawOutline: (CGContextRef) cr {...})转换为 Swift 风格的消息,而没有太注意(例如func drawOutline(cr:CGContextRef) {...}),所以我一开始并没有意识到我正在传递CGContextRef参数,而是进行了扩展CGContext(而不是 Ref)。但它成功了!
更奇怪的是,当我将这些CGContextRef' 更改为CGContext' 时。它仍然有效。不仅编译,而且运行和绘制正确。为了好玩,我改成了extension CGContextRef. 但它仍然继续发挥作用。就好像 Swift 足够聪明,可以将它们归结为同一件事。是吗?或者这里发生了更微妙/更酷的事情?
这里没有什么特别神奇的地方。CGContextRef只是CGContext(几乎)同一事物的不同名称。Swift 只是为你模糊了 typedef。
<CoreGraphics/CGContext.h>
typedef struct CGContext *CGContextRef;
Run Code Online (Sandbox Code Playgroud)
另请参阅Core Foundation 上的《使用 Swift 与 Cocoa 和 Objective-C》指南部分:
当 Swift 导入 Core Foundation 类型时,编译器会重新映射这些类型的名称。编译器从每个类型名称的末尾删除 Ref,因为所有 Swift 类都是引用类型,因此后缀是多余的。
他们只是选择不取消Ref名字的形式,我想对于习惯打字的老前辈来说:D
| 归档时间: |
|
| 查看次数: |
1296 次 |
| 最近记录: |