Подтвердить что ты не робот

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()    
}
4b9b3361

Ответ 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)