【问题标题】:Update CGRectMake to CGRect in Swift 3 Automatically在 Swift 3 中自动将 CGRectMake 更新为 CGRect
【发布时间】:2016-11-15 01:25:42
【问题描述】:

现在 CGRectMake 、 CGPointMake 、 CGSizeMake 等已在 Swift 3.0 中删除,是否有任何方法可以自动更新所有初始化,例如 CGRectMake(0,0,w,h) to CGRect(x:0,y:0,width:w,height:h)。手动过程是......相当痛苦。

不确定为什么当我将代码转换为当前 Swift 语法时 Apple 不自动转换它...

【问题讨论】:

  • Convert to Current Swift Syntax 适用于我并将CGRectMake(0,0,w,h) 转换为CGRect(x: 0,y: 0,width: w,height: h)。如果它在您的情况下不起作用,那么您应该提交错误报告。

标签: ios swift swift3 cgrectmake


【解决方案1】:

最简单的解决方案可能只是重新定义 Apple 取消的功能。示例:

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

将其放入您的模块中,所有对 CGRectMake 的调用将再次起作用。

【讨论】:

  • 嗯,这很酷!让我看看别人是怎么想的;否则,我会接受你的答案!
  • 我一直在等待 PaintCode 更新到 Swift 3。那里有所有 CGRectMakes,这是迄今为止最好的解决方案。
  • 如果你可以用同样的方式用 CGRect 初始化,为什么首先要有一个 CGRectMake,我不明白
  • 以前有CGRectMake,因为Apple 没有微调Core Graphics 导入Swift 的方式。他们现在有,所以CGRectMake 在当前的 Swift 版本中不可用。
  • Obj-C 的人正在遭受迁移到 Swift 的痛苦 :-) 该解决方案既快速又肮脏。我想要一个快速端口。但如果你使用的是 Swift,最好只使用范例。并不像起初看起来那么糟糕。如果我真的被标签所困扰,我会进行扩展。你习惯的那种。在我的职业生涯中,我一直在用神秘/简洁与长/标签来回走动,它们都有优势。总体而言,标签使代码更容易维护和逆向工程,因为一段时间后你确实忘记了,而且为了找出未命名的参数而不得不查找每个函数很麻烦。
【解决方案2】:

简短的回答:不要这样做。不要让 Apple 左右你。我讨厌 CGRect(x:y:width:height:)。我已经提交了一个错误。我认为初始化器应该是CGRect(_:_:_:_:),就像CGRectMake一样。我在 CGRect 上定义了一个扩展来提供它,并在我开始的那一刻将该扩展放入每个项目中。

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

这样,我所要做的就是在所有地方将“CGRectMake”更改为“CGRect”,我就完成了。

【讨论】:

  • 感谢您提供这个非常有用的答案...您节省了我的时间。
  • 我在哪里可以添加这个扩展?相反,我该如何使用它?谢谢
  • @nights,在任何课程之外
【解决方案3】:

Apple 实际上确实提供了此功能。你所要做的就是去:

编辑 > 转换 > 到最新的 Swift 语法...

然后按照屏幕上的提示进行操作。

这将解决您的语法问题,您不必为所有已删除的各种函数创建新函数。

【讨论】:

  • 确实如此!由于某些原因,当我第一次转换时,有些文件没有被转换。但是当我再次跑的时候,它做到了!我想必须运行多次,直到你的所有文件都被转换..
  • 它不适合我,我不止一次,甚至在做了一些改变之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多