现在在Swift 3.0中已经删除了CGRectMake、CGPointMake、CGSizeMake等函数,是否有任何方法可以自动更新所有的初始化,例如从CGRectMake(0,0,w,h)
到CGRect(x:0,y:0,width:w,height:h)
。手动处理相当繁琐。
不知道为什么苹果不会在将代码转换为当前Swift语法时自动转换它们...
现在在Swift 3.0中已经删除了CGRectMake、CGPointMake、CGSizeMake等函数,是否有任何方法可以自动更新所有的初始化,例如从CGRectMake(0,0,w,h)
到CGRect(x:0,y:0,width:w,height:h)
。手动处理相当繁琐。
不知道为什么苹果不会在将代码转换为当前Swift语法时自动转换它们...
最简单的解决方案可能就是重新定义苹果取走的这些功能所对应的函数。例如:
func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
return CGRect(x: x, y: y, width: width, height: height)
}
把这个放到你的模块中,所有对CGRectMake
的调用都会再次有效。
CGRectMake
,这无疑是最好的解决方案。 - D. GregCGRectMake
,因为苹果公司还没有完善将 Core Graphics 导入到 Swift 中的方式。现在他们已经做到了,所以 CGRectMake
在当前的 Swift 版本中不可用。 - rob mayoff简短回答:不要这样做。不要让苹果左右你。我讨厌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”,然后就完成了。
CGRectMake(0,0,w,h)
转换为CGRect(x: 0,y: 0,width: w,height: h)
。如果在您的情况下无效,则应提交错误报告。 - Martin R