Après la conversion du code vers la dernière version de Swift 3.0, cette erreur s’affiche.
Dites-moi aussi la solution pour CGSize = CGSizeMake(0,0)
static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero
Ce qui est également indisponible.
CGRect
Peut être simplement créé en utilisant une instance de CGPoint
ou CGSize
, donné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
Également la taille et le point avec 0 comme valeurs, cela peut être fait comme ceci.
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é par CGRect.zero
& CGPoint.zero
dans Swift 3.0
.
Solution rapide pour CGRectMake, CGPointMake, CGSizeMake in Swift3 & 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)
}
}
Cliquez ensuite sur " Rechercher et remplacer dans l'espace de travail " Recherchez CGRectMake, CGPointMake, CGSizeMake et remplacez-les par CGRect, CGPoint, CGSize.
Ces étapes pourraient faire gagner du temps, car Xcode ne nous permet pas pour l'instant de convertir rapidement de Swift 2+ à Swift 3
Dans Swift 3, vous pouvez simplement utiliser CGPoint.zero
ou CGRect.zero
au lieu de CGRectZero
ou CGPointZero
.
Cependant, dans Swift 4, CGRect.zero
et 'CGPoint.zero'
fonctionneront
Les structures ainsi que tous les autres symboles de Core Graphics et d'autres API sont devenus plus propres et incluent également des noms de paramètres. 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)
Apple Blog
Les modifications apportées à Swift 3 dans la syntaxe Swift et le changement de nom d'API rendent le langage plus naturel et offrent une expérience encore plus rapide lors de l'appel des frameworks Cocoa. Cadres populaires Core Graphics et Grand Central Dispatch ont de nouvelles interfaces beaucoup plus propres dans Swift.
Si vous voulez les utiliser comme dans Swift 2, vous pouvez utiliser les fonctions suivantes:
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 n'importe quelle classe et cela devrait fonctionner. (Fonctionne pour moi au moins)
Swift 3 Bonus: Pourquoi personne n’a mentionné le formulaire abrégé?
CGRect(Origin: .zero, size: size)
.zero
au lieu deCGPoint.zero
Une fois le type défini, vous pouvez l’omettre en toute sécurité.
Essayez ce qui suit:
var myToolBar = UIToolbar.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 44))
Ceci est pour le Swift's dernière version
Vous pouvez l'utiliser avec le remplacement de CGRectZero
CGRect.zero
Dans Swift 4 cela fonctionne comme ci-dessous
collectionView.setContentOffset(CGPoint.zero, animated: true)
Pour CGSize
CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)