【问题标题】:CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero is unavailable in SwiftCGRectMake、CGPointMake、CGSizeMake、CGRectZero、CGPointZero 在 Swift 中不可用
【发布时间】:2016-10-23 03:40:57
【问题描述】:

将代码转换为最新的 swift 3.0 后,我看到了这个错误。

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

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

这也是不可用的。

【问题讨论】:

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

标签: uikit swift3 xcode8 ios10


【解决方案1】:

代替 CGSizeMake 添加 CGSize 它将起作用。 CGSizeMake 用于目标 c。

你不想使用 make 和 swift

【讨论】:

    【解决方案2】:

    对于 CGSize

    CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
    

    【讨论】:

      【解决方案3】:

      您可以使用它来替换 CGRectZero

      CGRect.zero
      

      【讨论】:

        【解决方案4】:

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

        但是,在 Swift 4 中,CGRect.zero'CGPoint.zero' 可以工作

        【讨论】:

          【解决方案5】:

          在 Swift 4 中如下所示

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

          【讨论】:

            【解决方案6】:

            如果你想在 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)
            }
            

            只需将它们放在任何课程之外,它应该可以工作。 (至少对我有用)

            【讨论】:

              【解决方案7】:

              CGRect 可以使用CGPointCGSize 的实例简单地创建,如下所示。

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

              或者如果我们想指定CGFloatDoubleInt中的每个值,我们可以使用这种方法。

              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
              

              还有size和point的取值为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
              

              CGRectZero & CGPointZeroSwift 3.0 中替换为CGRect.zero & CGPoint.zero

              【讨论】:

              • 你能告诉我 CGSize = CGSizeMake(0,0) 在 swift 3 中没有工作的解决方案
              • @niravdesai21 更新了问题,请检查。
              • CGPointZero 和 CGRectZero 也没有任何解决方案?更新问题请更新答案
              • @niravdesai21 已更新。
              • “CGRectZero 在 Swift 中不可用”实际上是对 CGRect.zero 的语法更改,这是个笑话!这些人需要大量处理他们的编译警告......他们依靠 Stack Overflow 不断地拯救他们
              【解决方案8】:

              Swift 3 Bonus:为什么没有人提到短格式?

              CGRect(origin: .zero, size: size)
              

              .zero 而不是 CGPoint.zero

              定义类型后,您可以放心地省略它。

              【讨论】:

                【解决方案9】:

                尝试以下方法:

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

                这是swift的最新版本

                【讨论】:

                • 喜欢它(Y),这样更容易自动完成
                【解决方案10】:

                快速修复 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 希望它能减少您的麻烦 :)
                【解决方案11】:

                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 中有新的、更干净的界面。

                【讨论】:

                  猜你喜欢
                  • 2014-07-27
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-09-20
                  • 2014-04-05
                  • 2016-11-15
                  相关资源
                  最近更新 更多