CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero n’est pas disponible dans Swift

Après avoir converti le code au dernier swift 3.0, on m’a montré cette erreur.

entrer la description de l'image ici entrer la description de l'image ici

Dis-moi aussi la solution pour CGSize = CGSizeMake(0,0)

 static var frameAtStartOfPan: CGRect = CGRectZero static var startPointOfPan: CGPoint = CGPointZero 

Qui est également indisponible.

CGRect Peut être créé simplement en utilisant une instance de CGPoint ou CGSize , indiquée ci-dessous.

 let rect = CGRect(origin: CGPoint(x: 0,y :0), size: CGSize(width: 100, height: 100)) // Or let rect = CGRect(origin: .zero, size: CGSize(width: 100, height: 100)) 

Ou si nous voulons spécifier chaque valeur dans CGFloat ou Double ou Int , nous pouvons utiliser cette méthode.

 let rect = CGRect(x: 0, y: 0, width: 100, height: 100) // CGFloat, Double, Int 

CGPoint Peut être créé comme ceci.

  let point = CGPoint(x: 0,y :0) // CGFloat, Double, Int 

CGSize Peut être créé comme ceci.

 let size = CGSize(width: 100, height: 100) // CGFloat, Double, Int 

Aussi la taille et le point avec 0 comme valeurs, cela peut être fait comme ça.

 let size = CGSize.zero // width = 0, height = 0 let point = CGPoint.zero // x = 0, y = 0, equal to CGPointZero let rect = CGRect.zero // equal to CGRectZero 

CGRectZero & CGPointZero remplacés par CGRect.zero & CGPoint.zero dans Swift 3.0 .

Solution rapide pour CGRectMake, CGPointMake, CGSizeMake dans Swift3 et iOS10

Ajoutez ces extensions:

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

Ensuite, allez dans ” Rechercher et remplacer dans l’espace de travail ” Recherchez CGRectMake, CGPointMake, CGSizeMake et remplacez-les par CGRect, CGPoint, CGSize

Ces étapes peuvent sauver tout le temps car Xcode ne nous permet pas de convertir rapidement de Swift 2+ à Swift 3

Dans Swift 3, vous pouvez simplement utiliser CGPoint.zero ou CGRect.zero à la place de CGRectZero ou de CGPointZero .

Cependant, dans Swift 4, CGRect.zero et 'CGPoint.zero' fonctionneront

Les structures ainsi que tous les autres symboles dans Core Graphics et autres API sont devenus plus propres et incluent également des noms de parameters. https://developer.apple.com/reference/coregraphics#symbols

 CGRect(x: Int, y: Int, width: Int, height: Int) CGVector(dx: Int, dy: Int) CGPoint(x: Double, y: Double) CGSize(width: Int, height: Int) 

Exemple CGPoint:

 let newPoint = stackMid.convert(CGPoint(x: -10, y: 10), to: self) 

Exemple CGVector:

 self.physicsWorld.gravity = CGVector(dx: 0, dy: gravity) 

Exemple CGSize:

 hero.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 16, height: 18)) 

Exemple CGRect:

 let back = SKShapeNode(rect: CGRect(x: 0-120, y: 1024-200-30, width: 240, height: 140), cornerRadius: 20) 

Blog Apple

La modification de la syntaxe et de l’API de Swift dans Swift 3 rend le langage plus naturel et offre une expérience encore plus rapide lors de l’appel de frameworks Cocoa. Les frameworks populaires Core Graphics et Grand Central Dispatch ont de nouvelles interfaces beaucoup plus propres dans Swift.

Essayez ce qui suit:

 var myToolBar = UIToolbar.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 44)) 

Ceci est pour la dernière version du swift

Si vous voulez les utiliser comme dans swift 2, vous pouvez utiliser ces funcs:

Pour CGRectMake:

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

Pour CGPointMake:

 func CGPointMake(_ x: CGFloat, _ y: CGFloat) -> CGPoint { return CGPoint(x: x, y: y) } 

Pour CGSizeMake:

 func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize { return CGSize(width: width, height: height) } 

Il suffit de les mettre en dehors de toute classe et cela devrait fonctionner. (Fonctionne pour moi au moins)

Swift 3 Bonus: Pourquoi personne n’a mentionné le formulaire court?

 CGRect(origin: .zero, size: size) 

.zero au lieu de CGPoint.zero

Lorsque le type est défini, vous pouvez l’omettre en toute sécurité.

Dans Swift 4, cela fonctionne comme ci-dessous

 collectionView.setContentOffset(CGPoint.zero, animated: true)