web-dev-qa-db-fra.com

Mettre à jour CGRectMake à CGRect dans Swift 3 automatiquement

Maintenant que CGRectMake, CGPointMake, CGSizeMake, etc. ont été supprimés dans Swift 3.0, existe-t-il un moyen de mettre à jour automatiquement toutes les initialisations telles que de CGRectMake(0,0,w,h) to CGRect(x:0,y:0,width:w,height:h). Le processus manuel est .. assez pénible.

Vous ne savez pas pourquoi Apple ne convertit pas automatiquement cela lorsque je convertis le code en courant Swift Syntaxe ...

51
yonasstephen

Apple fournit effectivement cette fonctionnalité. Tout ce que vous avez à faire est d'aller à:

Éditer > Convertir > en Latest Swift Syntax ...

enter image description here

Et suivez les instructions à l'écran.

Cela résoudra vos problèmes de syntaxe et vous n'aurez pas à créer de nouvelles fonctions pour toutes les fonctions supprimées.

18
Wyetro

La solution la plus simple consiste probablement simplement à redéfinir les fonctions que Apple a supprimées. Exemple:

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
    return CGRect(x: x, y: y, width: width, height: height)
}

Mettez cela dans votre module et tous les appels à CGRectMake fonctionneront à nouveau.

79
rob mayoff

Réponse courte: ne le fais pas. Ne laissez pas Apple vous contrôler. Je détesteCGRect(x:y:width:height:). J'ai déposé un bogue dessus. Je pense que l'initialiseur devrait être CGRect(_:_:_:_:), tout comme CGRectMake. J'ai défini une extension sur CGRect qui la fournit et je l'ai intégrée dans chaque projet à l'instant où je commence.

extension CGRect {
    init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) {
        self.init(x:x, y:y, width:w, height:h)
    }
}

De cette façon, tout ce que j'ai à faire est de changer "CGRectMake" en "CGRect" partout, et j'ai terminé.

32
matt