casting swift cgfloat

casting - Swift Double no es convertible a CGFloat



(3)

Estoy tratando de dibujar un círculo simple cuando llego a la siguiente línea. Aparece el error "El doble no se puede convertir a CGFloat debajo de startAngle = 0.0

path.addArcWithCenter(center, radius: radius, startAngle: 0.0, endAngle: Float(M_PI) * 2.0, clockwise: true)

¿Cómo "lanzo" 0.0 para que sea CGFloat en Swift?

La función completa que estoy escribiendo:

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


Convierta los valores que necesitan ser CGFloat a CGFloat.

path.addArcWithCenter(center, radius: CGFloat(radius), startAngle: CGFloat(0.0), endAngle: CGFloat(M_PI) * 2.0, clockwise: true)

Es probable que startAngle no deba ser convertido si solo estás pasando un literal. También tenga en cuenta que este no es un modelo de estilo C, sino que en realidad se convierte entre diferentes tipos de Swift.

Edición: mirando a toda su función, esto funciona.

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


Debe teclear cast a través de CGFloat (0.0). CGFloat se ha ajustado para evaluar de manera diferente en la versión beta de Xcode 6 debido al hecho de que en Obj-C, CGFloat se convierte en flotante o doble dependiendo del objetivo (64 bits frente a 32 bits). Debe escribir cast un número a CGFloat en Swift para usar un CGFloat ya que nunca se le garantiza tener un flotante o un doble (porque esto depende del entorno). De esta manera, Swift no lanzará un ataque y seguirá siendo seguro para el "tipo".


Tal vez no sea una buena idea, pero utilicé NSNumber para convertir Double a Float, luego a CGFloat.

let myFloat = NSNumber.init(value: myDouble).floatValue let myCGFloat = CGFloat(myFloat)