当我在swift中学习Core Graphics时,我在youtube上观看的教程使用CGRectMake
函数而不是CGRect
的初始化函数来创建CGRect
实例。
这对我来说太奇怪了。我不明白为什么我应该使用前者,因为参数是相同的,我认为使用XXXMake
函数没有性能优势。
另外,为什么当CGRect
已经有一个具有完全相同参数的初始化程序时,swift甚至还有这样的“Make”功能?我认为模块的开发人员正在使用我不知道的某种设计模式。他们用过一个吗?如果是,那是什么?我真的想知道一些更多的设计模式。
答案 0 :(得分:20)
简短回答: CGRectMake
不是“由Swift提供”。 CoreGraphics中相应的C函数
框架是自动导入的,因此可以在Swift中使用。
更长的回答: CGRectMake定义于 来自CoreGraphics框架的“CGGeometry.h”
CG_INLINE CGRect
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
CGRect rect;
rect.origin.x = x; rect.origin.y = y;
rect.size.width = width; rect.size.height = height;
return rect;
}
在(Objective-)C中,该函数提供了一种方便的方法
初始化CGRect
变量:
CGRect r = CGRectMake(x, y, h, w);
Swift编译器自动导入所有函数 基础头文件(如果它们是Swift兼容的),所以这个 导入为
public func CGRectMake(x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect
您可以使用那个,也可以使用其中一个Swift初始化程序
public init(origin: CGPoint, size: CGSize)
public init(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat)
public init(x: Double, y: Double, width: Double, height: Double)
public init(x: Int, y: Int, width: Int, height: Int)
我认为它不会产生任何性能差异。很多人可能会
使用CGRectMake()
因为他们习惯于从旧的Swift之前使用它
倍。 Swift初始化程序更“流畅”,更具表现力
显式参数标签:
let rect = CGRect(x: x, y: x, width: w, height: h)
更新:从 Swift 3 / Xcode 8开始, CGRectMake
不再
可以在Swift中找到。