CGpoint Vs CGPointMake
Asked Answered
P

2

12

I have recently been introduced to swift.

A question, when to use CGPoint and when shall I use CGPointMake ?

I have interchanged these two statements and they both returned the same result

 self.anchorPoint  = CGPointMake(0.5, 0.5)

 self.anchorPoint  = CGPoint(0.5, 0.5)

Thanks

Plight answered 21/8, 2014 at 17:25 Comment(0)
D
18

Every struct in Swift gets an automatically created member-wise initializer. So, because struct CGPoint exists with members x and y, you can do:

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

(Note that you can't actually do CGPoint(0.5, 0.5) -- that gets a compile error because initializers require labels for all parameters, except where otherwise declared.)

In Swift 1.x-2.x, CGPointMake was a function imported from the C version of this API. In Swift 3, the initializer form is the only way to create a CGPoint -- it's one of the changes to make CoreGraphics much more Swifty.

Dewittdewlap answered 21/8, 2014 at 17:57 Comment(5)
"because C doesn't have member-wise initializers like Swift does" - not quite, you have a "compound literal" self.anchorpoint = (CGPoint){ 0.5, 0.5 };, but that is relatively new.Bjorn
C99 also has the {.x = 0.5, .y = 0.5} syntax.Mcgray
@jtbandes: Yes, but that is (if I remember correctly) a "designated initializer". You can use it to define and init a struct CGPoint p = {.x = 0.5, .y = 0.5}, but not as an expression in an assignment. self.anchorpoint = {.x = 0.5, .y = 0.5} does not compile.Bjorn
It does if you cast it!Mcgray
@Dewittdewlap The OP linked here from a tutorial saying he didn't really understand your answer. Would you consider editing to remove terminology which relies on the assumption that the reader knows anything about C / swift. For example, what do you meant by "struct" and "member-wise initializers"? These are terms I'm not familiar with, and expect the OP isn't familiar with either.Carpophagous
F
3

When you cmd-click on the type Xcode opens the file with the definition.

CGPoint is a struct:

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

and CGPointMake is just a function which creates a CGPoint and returns it:

func CGPointMake(x: CGFloat, y: CGFloat) -> CGPoint
Fatuity answered 21/8, 2014 at 17:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.