gpt4 book ai didi

swift - CGContext 和 CGContextRef 在 Swift 中是否相同?这是如何运作的?

转载 作者:可可西里 更新时间:2023-11-01 00:52:31 27 4
gpt4 key购买 nike

我今天早上将一些 ObjectiveC 自定义 UIView 子类移植到 Swift。想要让它更“面向对象”,我正在按照使用方法扩展 CGContext 的示例进行操作。例如

extension CGContext {
func fillColor(color:UIColor) {
CGContextSetFillColorWithColor(self, color.CGColor)
}
}

因为我正在将 objective-c 风格的消息(例如 -(void) drawOutline: (CGContextRef) cr {...})转换为 Swift 风格的消息而没有太注意(例如 func drawOutline(cr:CGContextRef) {...}), 一开始我没有意识到我正在传递 CGContextRef 参数,但是扩展了 CGContext(不是引用)。但它奏效了!

更奇怪的是,当我将那些 CGContextRef 更改为 CGContext 时。它仍然有效。不仅编译,而且正确运行和绘制。为了好玩,我更改为 extension CGContextRef。然而它仍然继续工作。就好像 Swift 足够聪明,可以将它们归结为同一件事。是吗?还是这里发生了更微妙/更酷的事情?

最佳答案

这里没有什么特别神奇的。 CGContextRefCGContext 只是(几乎)同一事物的不同名称。 Swift 只是为你模糊了 typedef。

<CoreGraphics/CGContext.h>

typedef struct CGContext *CGContextRef;

另见 Using Swift with Cocoa and Objective-C核心基础指南部分:

When Swift imports Core Foundation types, the compiler remaps the names of these types. The compiler removes Ref from the end of each type name because all Swift classes are reference types, therefore the suffix is redundant.

他们只是选择不删除名称的 Ref 形式,我想对于习惯输入它的老 friend 来说 :D

关于swift - CGContext 和 CGContextRef 在 Swift 中是否相同?这是如何运作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com