【问题标题】:What's the difference between using CGSizeMake and CGSize? Is one better than the other?使用 CGSizeMake 和 CGSize 有什么区别?这个比那个好吗?
【发布时间】:2016-05-01 03:16:22
【问题描述】:

CGSize(width: 360, height: 480) 和 CGSizeMake(360, 480) 似乎具有相同的效果。一个比另一个更受欢迎吗?有什么区别?

【问题讨论】:

标签: ios swift cgfloat cgsize


【解决方案1】:

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

extension CGSize {
    public static var zero: CGSize { get }
    public init(width: Int, height: Int)
    public init(width: Double, height: Double)
}

CGSizeMake 是从 Objective-C 桥接的剩余内联函数:

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

// ...

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

两者在 Swift 中具有相同的功能,CGSize 构造函数只是比另一个更“Swifty”并且提供方便。

【讨论】:

  • 那么一个比另一个更受欢迎吗?谢谢!
  • 这都是偏好,虽然我发现使用纯 Swift 代码库 CGSize(...) 比 CGSizeMake(...) 更干净。
  • 非常感谢@JAL!不幸的是,必须等待 9 分钟才能接受您的回答 :)
  • @Crashalot 当然,我这周有时间会看看这些。快乐的黑客攻击!
  • 我很好奇这如何与 swift 一起工作。来自developer.apple.com/library/ios/documentation/GraphicsImaging/…“您的应用程序应避免直接读取和写入存储在 CGRect 数据结构中的数据。而是使用此处描述的函数来操作矩形并检索其特征。”。谈论诸如CGRectGetMidXCGRectGetWidth之类的功能。
【解决方案2】:

虽然它们在功能上没有任何区别,但 CGSizeMake() 已/将被弃用。 CGSize() 更易于书写和阅读,因此 Apple 更希望您将来使用 CGSize()。

【讨论】:

  • “CGSizeMake() 是/将被折旧”你能用可靠的来源支持这个说法吗?
  • 我还没有看到它们包含在最新的 Apple Swift 和 Foundation 存储库中
  • 仅供参考-您的意思是“已弃用”,而不是“已折旧”。非常不同的含义。 :)
【解决方案3】:

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

但是,如果您在谈论这两者之间的结构和程序差异,那么这里还有一些代码 sn-p 结构和解释。

  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() 更简单易懂。你可以从上面的例子中得到正确的..!!!!

谢谢,

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2014-05-28
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多