Je portais quelques sous-classes ObjectiveC
UIView
personnalisées à Swift
ce matin. Voulant le rendre plus "orienté objet", je suivais l'exemple de l'extension CGContext
avec des méthodes. Par exemple.CGContext ET CGContextRef identique dans Swift? Comment cela marche-t-il?
extension CGContext {
func fillColor(color:UIColor) {
CGContextSetFillColorWithColor(self, color.CGColor)
}
}
Parce que je convertissait les messages objectif de style C (par exemple -(void) drawOutline: (CGContextRef) cr {...}
) à ceux de style Swift sans payer à beaucoup d'attention (par exemple func drawOutline(cr:CGContextRef) {...}
), je ne savais pas au début que je passais CGContextRef
arguments, mais avait étendue CGContext
(pas Ref). Mais ça a marché!
Ce qui était plus étrange, c'était quand j'ai changé ces CGContextRef
à juste CGContext
. Et ça a toujours marché. Pas seulement compilé, mais a couru et a dessiné correctement. Pour le plaisir, j'ai changé pour extension CGContextRef
. Et pourtant, cela continue à fonctionner. C'est comme si Swift était assez intelligent pour les réduire à la même chose. Est-ce? Ou y a-t-il quelque chose de plus subtil/cool qui se passe ici?
Obijective-C et Swift. Et vous avez ajouté le tag C juste pour le plaisir, je suppose. – Olaf
Pas pour le plaisir. Peut-être par confusion mal orientée. Les parties de 'ObjectiveC 'mentionnées ici sont strictement' C' (rappelez-vous que ObjectiveC est un surensemble de C). 'CGContext' est une structure C opaque stricte. Et 'CGContextRef' est le typedef pour un pointeur vers le même. Je suppose que j'ai fait C, parce que c'est plus une question sur la façon dont Swift traduit les parties C que l'ObjectiveC. –