CGRectMake,CGPointMake,CGSizeMake,CGRectZero,CGPointZero在Swift中不可用


242

将代码转换为最新的swift 3.0之后,将显示此错误。

在此处输入图片说明在此处输入图片说明

还告诉我解决方案 CGSize = CGSizeMake(0,0)

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

这也不可用。


但是在将我之前的代码转换为swift3之后,我遇到了这个问题,想知道更新版本中的语法是否有任何变化
niravdesai21,2016年

Answers:


493

CGRect可以使用下面的CGPoint或实例简单地创建CGSize

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))

或者,如果要在CGFloatDouble或中指定每个值Int,则可以使用此方法。

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

CGPoint 可以这样创建。

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

CGSize 可以这样创建。

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

大小和点也都以0作为值,可以这样进行。

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

CGRectZeroCGPointZero替换为CGRect.zeroCGPoint.zeroin Swift 3.0


您能否也告诉我CGSize = CGSizeMake(0,0)的解决方案,它不会迅速
唤醒

@ niravdesai21更新了问题,请检查。

CGPointZero和CGRectZero也没有为此提供任何解决方案吗?更新的问题,请更新答案
niravdesai21,2016年

@ niravdesai21更新。

4
实际上,这是对CGRect的语法更改。“ CGRectZero在Swift中不可用”。这些家伙需要大量时间来处理其编译警告...他们依靠Stack Overflow不断为他们提供
救助

49

Swift3和iOS10中快速修复CGRectMake,CGPointMake,CGSizeMake

添加这些扩展名:

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)
    }
}

然后转到“ 在工作区中查找和替换 ”,找到CGRectMake,CGPointMake,CGSizeMake并将其替换为CGRect,CGPoint,CGSize

这些步骤可能会节省所有时间,因为Xcode现在无法让我们从Swift 2+快速转换到Swift 3


出色的解决方案!
Oprimus

@Oprimus希望它可以减少您的麻烦:)
Rafat touqir Rafsun

26

在Swift 3中,您可以简单地使用CGPoint.zeroCGRect.zero代替CGRectZeroCGPointZero

然而,在斯威夫特4,CGRect.zero'CGPoint.zero'将工作


1
@ChewieTheChorkie你是对的“唯一”一词造成的混乱,我已经删除了。
大师

12

如果要像在swift 2中一样使用它们,可以使用以下功能:

对于CGRectMake:

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

对于CGPointMake:

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

对于CGSizeMake:

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

只要将它们放在任何班级之外,它就可以正常工作。(至少对我有用)


9

Core Graphics和其他API中的结构以及所有其他符号已变得更加整洁,还包括参数名称。 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)

CGPoint示例:

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

CGVector示例:

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

CGSize示例:

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

CGRect示例:

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

苹果博客

Swift 3中的Swift语法和API重命名更改使该语言更加自然,并在调用Cocoa框架时提供了更加Swift-y的体验。流行的框架Core Graphics和Grand Central Dispatch在Swift中具有更干净的新界面。


5

尝试以下方法:

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

这是swift的最新版本


喜欢(Y),自动完成会更容易
Husam



0

在Swift 4中,其工作方式如下

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

0

对于CGSize

CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.