【问题标题】:CGpoint Vs CGPointMakeCGpoint 与 CGPointMake
【发布时间】:2014-08-21 17:25:50
【问题描述】:

我最近被介绍给 swift。

一个问题,什么时候使用 CGPoint,什么时候应该使用 CGPointMake ?

我已经互换了这两个语句,它们都返回了相同的结果

 self.anchorPoint  = CGPointMake(0.5, 0.5)

 self.anchorPoint  = CGPoint(0.5, 0.5)

谢谢

【问题讨论】:

    标签: swift cgpoint


    【解决方案1】:

    Swift 中的每个结构都有一个自动创建的成员初始化器。所以,因为struct CGPoint 存在成员xy,你可以这样做:

     self.anchorPoint  = CGPoint(x: 0.5, y: 0.5)
    

    (请注意,您实际上不能执行 CGPoint(0.5, 0.5) ——这会导致编译错误,因为初始化程序需要所有参数的标签,除非另有声明。)

    在 Swift 1.x-2.x 中,CGPointMake 是从该 API 的 C 版本导入的函数。在 Swift 3 中,初始化表单是创建 CGPoint 的唯一方法——这是使 CoreGraphics 更加 Swifty 的更改之一。

    【讨论】:

    • “因为 C 没有像 Swift 那样的成员初始化器” - 不完全是,你有一个 "compound literal" self.anchorpoint = (CGPoint){ 0.5, 0.5 };,但这是相对较新的。
    • C99 也有 {.x = 0.5, .y = 0.5} 语法。
    • @jtbandes:是的,但那是(如果我没记错的话)“指定初始化程序”。您可以使用它来定义和初始化结构CGPoint p = {.x = 0.5, .y = 0.5},但不能用作赋值中的表达式。 self.anchorpoint = {.x = 0.5, .y = 0.5} 无法编译。
    • 如果你施放它就可以了!
    • @rickster 此处链接的 OP 从教程中说他并不真正理解您的答案。您是否会考虑编辑以删除依赖于读者对 C / swift 有任何了解的假设的术语。例如,“struct”和“member-wise initializers”是什么意思?这些是我不熟悉的术语,并且希望 OP 也不熟悉。
    【解决方案2】:

    当你 cmd-click 类型时,Xcode 会打开包含定义的文件。

    CGPoint 是一个结构体:

    struct CGPoint {
        var x: CGFloat
        var y: CGFloat
    }
    

    CGPointMake 只是一个创建CGPoint 并返回它的函数:

    func CGPointMake(x: CGFloat, y: CGFloat) -> CGPoint
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多