我想画一个简单的圆,当我到达下面的行,我得到错误"Double is Not Convertable to CGFloat下的startAngle = 0.0
path.addArcWithCenter(center, radius: radius, startAngle: 0.0, endAngle: Float(M_PI) * 2.0, clockwise: true)
我如何"0.0使它CGFloat在Swift?
我正在写的完整函数:
func drawCircle() {
// Drawing code
var bounds:CGRect = secondView.bounds
var center = CGPoint()
center.x = bounds.origin.x + bounds.size.width / 2.0
center.y = bounds.origin.y + bounds.size.height / 2.0
var radius = (min(bounds.size.width, bounds.size.height) / 2.0)
var path:UIBezierPath = UIBezierPath()
path.addArcWithCenter(center, radius: radius, startAngle: CGFloat(0.0), endAngle: Float(M_PI) * 2.0, clockwise: true)
path.stroke()
}
将需要CGFloat的值转换为CGFloat
path.addArcWithCenter(center, radius: CGFloat(radius), startAngle: CGFloat(0.0), endAngle: CGFloat(M_PI) * 2.0, clockwise: true)
如果你只是传递一个文字,startAngle可能不需要转换。还要注意,这不是C风格强制转换,而是在不同的Swift类型之间进行转换。
编辑:看看你的整个功能,这是有效的。
func drawCircle() {
// Drawing code
var bounds:CGRect = self.view.bounds
var center = CGPoint()
center.x = bounds.origin.x + bounds.size.width / 2.0
center.y = bounds.origin.y + bounds.size.height / 2.0
var radius = (min(bounds.size.width, bounds.size.height) / 2.0)
var path:UIBezierPath = UIBezierPath()
path.addArcWithCenter(center, radius: CGFloat(radius), startAngle: CGFloat(0.0), endAngle: CGFloat(Float(M_PI) * 2.0), clockwise: true)
path.stroke()
}
必须通过CGFloat(0.0)进行类型转换。CGFloat在Xcode 6的测试版中被调整为评估不同,因为在Obj-C中,CGFloat根据目标(64位对32位)转换为float或double。你必须在Swift中将一个数字强制类型转换为CGFloat才能使用CGFloat,因为你永远不能保证有一个float或double(因为这取决于环境)。这样,斯威夫特就不会大发脾气,而且仍然是"类型"安全的。
此错误将在Swift 5.5
中消失
也许这不是一个好主意,但我使用NSNumber将Double转换为Float,然后转换为CGFloat。
let myFloat = NSNumber.init(value: myDouble).floatValue
let myCGFloat = CGFloat(myFloat)