Swift Double не конвертируется в CGFloat
Я пытаюсь нарисовать простой круг, когда получаю следующую строку. Я получаю сообщение об ошибке "Double не конвертируется в 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()
}
Ответы
Ответ 1
Преобразуйте значения, которые должны быть 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()
}
Ответ 2
Вы должны ввести его через CGFloat (0.0). CGFloat был скорректирован для оценки по-разному в течение бета-версии Xcode 6 из-за того, что в Obj-C CGFloat отличает либо плавающий, либо двойной в зависимости от цели (64 бит против 32 бит). Вы должны ввести число CGFloat в Swift для использования CGFloat, так как вы никогда не гарантируете наличие поплавка или двойное (поскольку это зависит от среды). Таким образом, Swift не будет подгонять и по-прежнему будет "безопасным".
Ответ 3
Возможно, это не очень хорошая идея, но я использовал NSNumber для преобразования Double to Float, а затем в CGFloat.
let myFloat = NSNumber.init(value: myDouble).floatValue
let myCGFloat = CGFloat(myFloat)