当我到达以下行时,我试图绘制一个简单的圆圈我得到错误" Double startAngle = 0.0
path.addArcWithCenter(center, radius: radius, startAngle: 0.0, endAngle: Float(M_PI) * 2.0, clockwise: true)
我如何"演员" 0.0在Swift中使它成为CGFloat?
我写的完整功能:
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()
}
答案 0 :(得分:24)
将需要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()
}
答案 1 :(得分:8)
您必须通过CGFloat(0.0)输入它。由于在Obj-C中,CGFloat根据目标(64位对32位)转换为浮点或双精度,因此在整个测试版Xcode 6中对CGFloat进行了不同的评估。你必须在Swift中输入一个数字到CGFloat来使用CGFloat,因为你永远不能保证有一个浮点数或一个double(因为这取决于环境)。通过这种方式,斯威夫特不会打出一个合适的选手,而且仍然会打造出类型。安全。
答案 2 :(得分:1)
此错误将在 Swift 5.5
中消失。
答案 3 :(得分:0)
也许这不是一个好主意,但我使用NSNumber将Double转换为Float,然后转换为CGFloat。
let myFloat = NSNumber.init(value: myDouble).floatValue
let myCGFloat = CGFloat(myFloat)