使用CGSize和CGSizeMake有什么区别?其中一个更好吗?

5

CGSize(width: 360, height: 480)CGSizeMake(360, 480)看起来具有相同的效果。一个比另一个更受欢迎吗?它们的区别是什么?

答:这两种方式都可以创建一个宽为360,高为480的CGSize对象。但是,它们的语法不同。前者使用了Swift中的初始化方法,后者使用了Objective-C中的C函数。在iOS开发中,由于Swift语言的流行,第一种方式更常用。

3个回答

11

CGSize的构造函数是基于CGSize的Swift扩展:

extension CGSize {
    public static var zero: CGSize { get }
    public init(width: Int, height: Int)
    public init(width: Double, height: Double)
}
< p > CGSizeMake 是从 Objective-C 桥接过来的残留内联函数:

/*** Definitions of inline functions. ***/

// ...

public func CGSizeMake(width: CGFloat, _ height: CGFloat) -> CGSize

在 Swift 中,CGSize 构造函数和另一个函数具有相同的功能,只不过 CGSize 构造函数更符合“Swifty”的风格,因此提供了更加方便的使用方式。


那么,一个比另一个更受欢迎吗?谢谢! - Crashalot
1
这完全是个人偏好的问题,尽管我发现在纯Swift代码库中使用CGSize(...)比使用CGSizeMake(...)更加简洁。 - JAL
很酷,谢谢@JAL!不幸的是,必须等待9分钟才能接受您的答案 :) - Crashalot
我对Swift的运作方式很好奇。从https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGGeometry/#//apple_ref/c/func/CGRectMake中可以看到,“您的应用程序应避免直接读取和写入存储在CGRect数据结构中的数据。相反,使用此处描述的函数来操作矩形并检索其特性。”这里谈论的是像`CGRectGetMidX` CGRectGetWidth等函数。 - user498982
@AndrewCarter 那些内联的 CGRectGet[X] 函数在 Swift 中应该仍然以相同的方式工作,尽管我不确定这是否是您要问的。如果这不是您要问的,请提出一个新问题。 - JAL
显示剩余4条评论

2

虽然从功能上来说它们没有任何区别,但CGSizeMake()将会被弃用。使用CGSize()更容易书写和阅读,因此苹果建议您在未来使用CGSize()


9
"CGSizeMake()将被弃用"这一说法能否提供可信的来源支持? 可以参考苹果官方文档,其中在iOS 14中已经将该方法标记为过时(deprecated):https://developer.apple.com/documentation/coregraphics/1454727-cgsize_make - JAL
我还没有在最新的苹果Swift和Foundation仓库中看到它们被包含。 - Esqarrouth
3
FYI - 你的意思是“已弃用”,而不是“贬值”。两者意义非常不同。 :) - rmaddy

1

如果你在谈论可用性方面的差异,那么CGSize()CGSizeMake()之间没有基本区别。

但是,如果你在谈论这两者之间的结构和程序上的区别,这里有一些代码片段的结构和解释。

  1. CGSize()

    struct CGSize { var width: CGFloat var height: CGFloat init() init(width width: CGFloat, height height: CGFloat) }
    
  2. CGSizeMake()

    func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize
    

解释:-

在第一种情况下,即CGSize(),代码清楚地表明它是一个结构体,通常以CGFloat()作为高度和宽度,并表示距离向量而不是物理大小。作为向量,值可以是负数。

另一方面,在CGSizeMake()的情况下,我们可以很容易地理解它是一个函数而不是结构体。它通常以CGFloat()作为高度和宽度,并返回一个CGSize()结构体。

示例:-

  1. CGSize()

    var sizeValue = CGSize(width: 20, height: 30) //Taking Width and Height
    
  2. CGSizeMake()

    var sizeValue = CGSizeMake(20,30) //Taking Width and Height too but without named parameters
    
现在,如果纯粹使用Swift语言和代码,则CGSize()CGSizeMake()更简单易懂。你可以从上面的例子中看到这一点..!!!
谢谢,
希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接